Laravel 5.5 許可權控制
阿新 • • 發佈:2018-11-30
許可權控制
// 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); // 不依賴模型的動作