- 生成模型策略文件
- 编写模型策略文件
// 此处可以只有一个参数,也是默认当前登陆信息
// public function test(Admin $admin)
public function test(Admin $admin, Admin $model) {
...
}
PS:注意,此处第一个参数代表当前登陆的信息,第二个参数代表控制器传过来的模型。
- 注册模型策略app/Providers/AuthServiceProvider.php
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
Admin::class => AdminPolicy::class,
];
- 在控制器中使用模型策略文件
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class AdminController extends Controller
{
use AuthorizesRequests;
public function index()
{
$admin = \Auth::user();
// 注意,使用$this->authorize时,必须引入AuthorizesRequests类
$this->authorize('test', $admin);
// 也可以用can方法
auth('admin')->user()->can('test', $admin);
return view('admin::auth.index');
}
}
PS: can() 方法会根据第二个参数的模型的类型去授权策略注册表(第三步)里面去查找该模型对应的授权策略类,也就是你在 AuthServiceProvider 的 policies 属性指定的模型以及授权策略类对应关系:
- 前端也有
@can
标签,其作用相当于auth()->user()->can('test', $admin);