Laravel Spatie 角色获取当前用户角色

Sar*_* B. 5 laravel laravel-5

使用 laravel Spatie/Roles 有没有办法获取当前登录的用户角色?

我试过了

if($this->hasRole('admin')) { //do something }
Run Code Online (Sandbox Code Playgroud)

但它不会工作

Aug*_*ura 25

在使用该Spatie\Permission\Traits\HasRoles特征的模型中(在大多数情况下User),您可以调用各种方法来验证或检索角色。
他们是:

  • roles
  • hasRole
  • hasAnyRole
  • hasAllRoles
  • getRoleNames

使用示例

对于给定的用户,

$roles = $user->getRoleNames();// Returns a collection
Run Code Online (Sandbox Code Playgroud)

参考这里


Mai*_*rey 12

如果您知道用户只有一种角色(例如:“客户”),则可以按如下方式显示:

{{ Auth::user()->roles->pluck('name')[0] ?? '' }}
// or with the auth() helper:
{{ auth()->user()->roles->pluck('name')[0] ?? '' }}

// output: "customer"
Run Code Online (Sandbox Code Playgroud)

然后你可以检查你的刀片文件:

@if ( auth()->user()->roles->pluck('name')[0] ?? '' === 'customer' )
   <h1>Hello Customer {{auth()->user()->name }}</h1>
    ...
@endif
Run Code Online (Sandbox Code Playgroud)

或者甚至更简单:

@role('customer')
    I am a Customer!
@else
    I am not a Customer ...
@endrole
Run Code Online (Sandbox Code Playgroud)


Sar*_* B. 8

想通了,对于你们这些人来说,这就是你们的做法。

if(Auth::user()->hasRole('my_role_name'))
{
    // do something
}
  //otherwise do something else
Run Code Online (Sandbox Code Playgroud)


小智 7

{{ Auth::user()->roles->pluck('name') }}
Run Code Online (Sandbox Code Playgroud)


小智 5

我使用以下命令获取当前登录的管理员用户名

$user->getRoleNames()->first();
Run Code Online (Sandbox Code Playgroud)

得到的回应是

“超级管理员”