我创建了一个名为ProjectPolicy
的策略,该策略具有一个功能:
public function update(User $user, Project $project)
{
return $project->owner_id == $user->id;
}
我在AuthServiceProvider
中将保单注册为:
protected $policies = [
'App\Project' => 'App\Policies\ProjectPolicy'
]
在AuthServiceProvider
中,我也这样:
public function boot(Gate $gate)
{
$this->registerPolicies();
$gate->before(function ($user) {
return $user->isAdmin();
});
}
如果用户是admin,则应该不应用该策略。但是,当我这样做时,它完全剥夺了非管理员用户的访问权限。为什么?
答案 0 :(得分:0)
要解决此问题,boot
方法应更新为:
public function boot(Gate $gate)
{
$this->registerPolicies();
$gate->before(function ($user) {
return $user->isAdmin() ? true : null;
});
}
来自https://laravel.com/docs/5.8/authorization#intercepting-gate-checks:
如果before回调返回非空结果,则结果为 考虑了检查的结果。