シェア
//Laravelで「Simple ACL」を構築する方法

Laravelで「Simple ACL」を構築する方法

Laravelの認証システムは、ユーザー登録、ログイン、ログアウト、パスワードリセットなどを簡素化し、ウェブアプリケーションに迅速かつ容易に実装できるソリューションを提供します。

ただし、ウェブサイトの一部へのアクセス権を制御したい場合、管理者以外のユーザーに特定のページの機能を無効化したい場合、または誰かが自分の連絡先のみを編集できるようにしたい場合には、LaravelのACL(アクセス制御リスト)を実装する必要があります(Laravel 5.1.11以降)。

ACLを構築するために、Laravelに組み込まれているGateクラスを使用します。このクラスは、ユーザー(ログインしているユーザーや特定のユーザー)が何かを「許可されているか」を確認するためのものです。以下にサンプルコードを示します:

if (Gate::denies('update-contact', $contact)) {
    abort(403);
}

上記のコードをコントローラに追加し、ログインしているユーザーがupdate-contactの権限を拒否されたかどうかを確認できます。また、反対の動作を行いたい場合は、Gate::allowsを使用できます。

LaravelのACLは、「Ability」という概念に基づいています。1つのAbilityは1つのキーです(例:update-contact)。

ACLのためのAbilityの定義

Abilityを定義するために、デフォルトではAuthServiceProviderに記述します。

class AuthServiceProvider extends ServiceProvider
{
    public function boot(GateContract $gate)
    {
        parent::registerPolicies($gate);
        $gate->define('update-contact', function ($user, $contact) {
            return $user->id === $contact->user_id;
        });
    }
}

そして、以下のように確認できます:

if (Gate::denies('update-contact', $contact)) {
    abort(403);
}

Policiesの使用

AuthServiceProviderに直接多くの定義を書く代わりに、複数のPolicyクラスを作成して管理することができます。

以下のコマンドを実行すると、ContactPolicyというポリシークラスが自動的にapp/Policiesフォルダに作成されます:

php artisan make:policy ContactPolicy

これにより、ContactPolicyファイルが生成され、以下の内容が自動で作成されます:

<?php

namespace App\Policies;

class ContactPolicy
{
    /**
     * Create a new policy instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    // updateメソッドを追加
    public function update($user, $contact)
    {
        return $user->id === $contact->user_id;
    }
}

次に、このクラスをAuthServiceProviderに登録します:

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        Contact::class => ContactPolicy::class,
    ];
}

これで、コントローラで以下のように確認できます:

if (Gate::denies('update', $contact)) {
    abort(403);
}

今すぐ応募







    福利厚生

    給料・ボーナス制度

    社員の感情・願望を理解しているので、リバークレーンベトナムは特に年2回の定期昇給制度を設けています。毎年6月と12月に評価を行い、毎年1月と7月に給与が変更されます。また、社員は月次と年次の優秀な個人には定期的な業績賞与が別で支給されます。

    日本研修制度

    世界中の新しい技術分野に触れるために、社員を日本にオンサイトさせる方針があります。さらに、技術分野か管理分野かのキャリアパスは社員の決定次第です。

    毎年社員旅行

    リバークレイン・ベトナムは、スタッフに挑戦の機会を提供するだけでなく、年に一度の魅力的な旅行で彼らを楽しませています。エキサイティングなガラディナーやチームビルディングゲームは、リバークレインのメンバー同士の絆をさらに深める手助けをします。

    リバークレイン イベント

    チームビルディング・ファミリーデー・お夏休み・中秋節などのイベントはチーム内のメンバーが接続出来るしお互いに自分のことを共有出来る機会です。ご家族員に連携する際にはそれも誇りに言われています。

    社会保険制度

    リバークレーンベトナムは従業員に社会保険、医療保険、失業手当などの社会保険制度があります。当社は、これらの保険に関するあらゆる手続きをスタッフに必ずサポートしています。さらに、他の保険契約も考慮され、検討されています。

    他福利

    社員向けの活動をサポートすることもあります。 ・文化・芸術・スポーツクラブの運営費用 ・技術研究の教科書を購入する金額 ・エンジニア試験・言語能力試験を受験料 ・ソフトスキルのセミナー・コースの参加費 ・等 また会社政策通り、他のベネフィットもあります。

    © 2012 RiverCrane Vietnam. All rights reserved.

    Close