Laravel中$this->authorize()如何确定调用对应的策略类?
当你在控制器中调用 $this->authorize('view', Course::findOrFail($course)) 时,Laravel 会通过以下逻辑精准匹配到对应策略类的方法:
依赖预注册的映射关系
你在AuthServiceProvider的boot方法里定义的$policies数组,本质是建立「模型类」与「策略类」的绑定规则。比如你必定写了类似protected $policies = [Course::class => CoursePolicy::class];的代码,Laravel 会缓存这份映射,处理授权请求时首先从这里查找对应模型的策略类。自动识别模型实例类型
authorize方法的第二个参数是Course模型实例,Laravel 会自动提取该实例的类名(即Course::class),再去预注册的$policies数组中匹配对应的策略类,此时就会定位到CoursePolicy。匹配同名策略方法
确定策略类后,Laravel 会直接调用该类中与第一个参数(此处为view)同名的方法,同时自动传入当前登录用户(Auth::user())和传入的模型实例作为方法参数。
额外补充:如果没有手动注册策略,Laravel 还支持自动发现机制——只要策略类遵循「模型名+Policy」的命名规则(如 Course 对应 CoursePolicy),且存放在 app/Policies 目录下,框架会自动完成模型与策略的绑定,无需手动配置。
内容的提问来源于stack exchange,提问作者Erfan Ahmed Siam

