【问题标题】:Checking for Roles & Permissions in zizaco/entrust laravel package检查 zizaco/entrust laravel 包中的角色和权限
【发布时间】:2017-05-08 10:18:42
【问题描述】:

我在我的 laravel 项目中使用 zizaco/entrust 包,旁边是多身份验证包名称 Hesto/multi-auth

我们在 laravel 5.4 上的项目,

当我想使用此方法获取当前登录用户的角色和权限时,出现以下错误: Entrust::hasRole('role-name');Auth::user()->hasRole('role-name');

但我可以使用这种方法访问用户的角色,例如:

$user = User::find($userid);
dd($user->hasRole('admin')); // Return true 

我完全按照安装说明进行操作,但出现以下错误:

`Non-static method Zizaco\Entrust\Entrust::hasRole() should not be called statically`

我该如何解决我的问题, 提前致谢

【问题讨论】:

  • 检查use 声明。您使用的是课堂还是facade?你想使用外观。
  • 您可能使用了错误的类。您是否尝试过使用\Entrust::hasRole();。尚未测试,但解决方案是您需要使用此处提到的 EntrustFacade:github.com/Zizaco/entrust/blob/master/src/Entrust/…
  • @Paladin 这对我有用,我在vendor/zizaco/entrust/src/Entrust/Entrust.php 中以user() 方法获取当前登录用户时遇到了另一个问题。因为我使用Hesto/MultiAuth之前的返回无法检索当前用户,然后为了解决问题,我将返回$this->app->auth->user();更改为返回Auth::guard('user')->user();,但我认为使用Entrust Fecade仍然存在问题

标签: laravel


【解决方案1】:

在此错误消息中,您有问题的答案:

不应静态调用非静态方法 Zizaco\Entrust\Entrust::hasRole()

你静态地调用了这个方法hasRole(),但是这个方法是非静态的。这意味着您需要创建此类的对象,但您却使用了一个类。

在您给出的示例中:

$user = User::find($userid);
dd($user->hasRole('admin')); // Return true

你创建了一个 User 类的对象,而 User 类(我认为)实现了 Entrust 类:

$user = User::find($userid);

$user 是一个对象,它不是静态的,你可以使用 hasRole()。

换句话说,要使用方法 hasRole() (字面意思 - 有人有角色吗?)你需要这个someone

$user->hasRole('admin') // Is this user has role `admin`?

希望,我已经解释过了。对不起我的英语(我只是在学习)。

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 2016-07-28
    • 2016-10-22
    • 2015-04-03
    • 2017-02-06
    • 2019-10-14
    • 1970-01-01
    • 2019-04-27
    • 2019-07-31
    相关资源
    最近更新 更多