Laravel Gate :: forUser与经过身份验证的用户有关

时间:2019-02-17 14:04:36

标签: laravel

我正在研究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是否包含预期的有效用户,并且确实如此。

您有任何类似的问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

在定义新的Gate资源时使用第一个参数。这在the documentation中都是可见的。

Gate::define('team_member', function ($user) {
    return $user->hasRole('team_member');
});