1. 程式人生 > >Laravel 5.5 許可權控制

Laravel 5.5 許可權控制

許可權控制

// Gate
    Gate 是用於判斷使用者是否有權進行某項操作的閉包,通常使用 Gate 門面定義在 App\Providers\AuthServiceProvider 類中。Gate 總是接收使用者例項作為第一個引數,還可以接收相關的 Eloquent 模型例項作為額外引數
    Gate::define('update-post', function ($user, $post) {
            return $user->id == $post->user_id;
        });  // 閉包風格
    
    Gate::define('update-post', '
[email protected]
'); // [email protected] 風格 Gate::resource('posts', 'PostPolicy'); // 資源 Gate [ Gate::define('posts.view', '[email protected]'); Gate::define('posts.create', '[email protected]'); Gate::define('posts.update', '[email protected]
'); Gate::define('posts.delete', '[email protected]'); ] Gate::resource('posts', 'PostPolicy', [ 'image' => 'updateImage', 'photo' => 'updatePhoto', ]); // 新增其他許可權 (授權動作) if (Gate::allows('update-post', $post)) { // 當前使用者可以更新文章... } if (Gate::denies('update-post', $post)) { // 當前使用者不能更新文章... } if (Gate::forUser($user)->allows('update-post', $post)) { // 判斷非當前使用者是否可以執行某一個操作 // 當前使用者可以更新文章... } if (Gate::forUser($user)->denies('update-post', $post)) { // 當前使用者不能更新文章... }

// Policy
    (策略過濾器)
        public function before($user, $ability)
        {
            if ($user->isSuperAdmin()) {
                return true;
            }
        }
    (使用 Policy 授權動作)
        if ($user->can('update', $post)) {
            //
        }
        if ($user->can('create', Post::class)) {  // 不依賴模型的動作
            // Executes the "create" method on the relevant policy...
        }

        $this->authorize('update', $post);
        $this->authorize('create', Post::class);  // 不依賴模型的動作