Gate 超级管理员拥有全部权限踩坑点
文档中是这样写的:
Gate 拦截检查
有时,你可能希望将所有能力授予特定用户。所以你可以在所有其他授权检查之前使用
before
方法来定义运行的回调:Gate::before(function ($user, $ability) { if ($user->isSuperAdmin()) { return true; } });
如果
before
回调方法返回的是非 null 的结果,则结果将被视为检查结果。
注意这句话 如果 before
回调方法返回的是非 null 的结果,则结果将被视为检查结果。
这句话是重点啊,如果直接定义
Gate::before(function ($user, $ability) {
return $user->id === 1;
});
这样会导致失败是返回的是false而不是null,会直接导致后续授权验证失效。找了很久错误才发现,怪我没仔细看文档。
本作品采用《CC 协议》,转载必须注明作者和本文链接