【发布时间】:2020-05-31 18:16:51
【问题描述】:
我正在像这样在我的代码中定义门
Gate::define('fullAccess',function ($user){
return $user->id == 1;
});
Gate::define('manager',function ($user){
return $user->type == User::TYPE_MANAGER;
});
然后在控制器中我正在检查用户是否有权访问
public function __construct()
{
if(!Gate::any(['fullAccess','manager'])){
abort(403);
}
}
但是有一个问题:
if(!Gate::any(['fullAccess','manager'])){
//returns true
}
if(Gate::any(['fullAccess','manager'])){
//returns false
}
我绝对确定我的 ID 等于 1,并且我认为如果当前用户至少有一个访问操作可用,any() 函数必须返回 true。我错过了什么吗?
我也尝试了none 函数,它的工作方式相同
if(Gate::none(['fullAccess','manager'])){
//returns true;
}
【问题讨论】:
-
只是一个偶然的想法,会不会是你检查得太早了?控制器的构造函数可以在门定义等之前执行。
-
@PavelLint 是的,你是对的。我将访问检查替换为
callAction,现在它工作得很好。谢谢! -
@PavelLint 你能把这个写成答案吗?