简介
在特定模型或资源中组织授权逻辑的类,指定某些动作是否有权限操作。
创建策略
使用 artisan 的 make:policy 命令进行创建
php artisan make:policy AdminPolicy
如果你想生成一个包含基本的 “CRUD(增删改查)” 策略方法的类,你可以在执行命令时指定一个 --model:
php artisan make:policy AdminPolicy --model=admin
生成的策略将放在 app/Policies 目录。
注册策略
只要模型和策略遵循标准的 Laravel 命名约定可以自动发现策略,,即:策略位于包含模型的目录下的 Policies 目录中。
因为新增了 Model 文件夹,需要使用 Gate::guessPolicyNamesUsing 方法手动注册策略,通常这个方法在 AuthServiceProvider 的 boot 方法中调用:
use Illuminate\Support\Facades\Gate;Gate::guessPolicyNamesUsing(function ($modelClass) {// 返回策略类名return 'App\\Policies\\'.class_basename($modelClass).'policy'; //使用动态类名之后创建的策略都不需要再注册});
注意:在
AuthServiceProvider中显式映射的任何策略都将优先于任何潜在的自动发现策略。
编写策略
示例:
use Illuminate\Auth\Access\Response;//策略:超级管理员编辑和删除保护public function remove(AdminUser $adminuser , $targetAdminUser){if($targetAdminUser->id == 1){return Response::deny("禁止对超级管理员进行操作");}return true;}
使用策略
对「编写策略」中的示例有效
$this->authorizeForUser(Auth::guard('admin')->user(), 'remove', $adminuser);
