我正在研究Laravel项目(5.7.21),并且正在尝试使用Gate :: forUser确定用户是否具有特定角色的授权。
我已经定义了以下门并在数据库中分配了相关角色。
select *
from (
select id,name,sort,"A" as type
from A
UNION
select id,name,sort,"B" as type
from B
) derived
order by id,type;
当我登录到我的应用程序时,我正在尝试检查是否已授权另一个用户:
Gate::define('team_member', function () {
return Auth::user()->hasRole('team_member');
});
Gate::define('shop', function () {
return Auth::user()->hasRole('shop');
});
我的问题是,对门进行评估的是经过身份验证的用户(本例中为我自己的用户),而不是我试图模仿的if (Gate::forUser($for_user)->allows('shop')){
Debugbar::info("I am a shop user : " . $for_user->first_name);
}
elseif (Gate::forUser($for_user)->allows('team_member')){
Debugbar::info("I am a team user : " . $for_user->first_name);
}
。因此,结果是错误的。 / p>
我已检查$for_user
是否包含预期的有效用户,并且确实如此。
您有任何类似的问题吗?
谢谢
答案 0 :(得分:0)
在定义新的Gate资源时使用第一个参数。这在the documentation中都是可见的。
Gate::define('team_member', function ($user) {
return $user->hasRole('team_member');
});