Override Authorizable在Laravel中的can方法



我最近继承了这个相当新的Laravel项目(它是8,我已经升级到9),他们在很多地方使用$request->user()?->can('some_permission')。但是他们在用户上也有一个user_level属性,对于admin来说是100,对于普通用户来说是0(不要问为什么他们把它设置为一个数字,我不知道)。因此,管理用户没有获得任何权限集,这意味着他们当然可以获得false以进行任何can()检查。是否有一种方法来覆盖can()方法返回true,如果user_level设置为100?或者是否有其他方法可以让管理员用户始终获得所有可用的权限?

我认为您可以利用Policy的before()方法。如果你想检查一些东西,before首先运行(如果它存在于策略中),如果它返回true,它将自动允许。


在你的例子中,我认为应该是:

public function before(User $user, $ability)
{
if ($user->user_level >= 100) {
return true;
}
}

最新更新