【问题标题】:Laravel Spatie Roles get current users roleLaravel Spatie 角色获取当前用户角色
【发布时间】:2019-08-19 22:50:54
【问题描述】:

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

我试过了

if($this->hasRole('admin')) { //do something }

但它不会工作

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

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

    • roles
    • hasRole
    • hasAnyRole
    • hasAllRoles
    • getRoleNames

    使用示例

    对于给定的用户,

    $roles = $user->getRoleNames();// Returns a collection
    

    Reference here.

    【讨论】:

      【解决方案2】:
      {{ Auth::user()->roles->pluck('name') }}
      

      【讨论】:

      • 如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。
      【解决方案3】:

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

      if(Auth::user()->hasRole('my_role_name'))
      {
          // do something
      }
        //otherwise do something else
      

      【讨论】:

        【解决方案4】:

        如果您知道用户只有一个角色(例如:“客户”),那么您可以将其显示如下:

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

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

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

        甚至更简单:

        @role('customer')
            I am a Customer!
        @else
            I am not a Customer ...
        @endrole
        

        【讨论】:

          【解决方案5】:

          Auth::user()->getRoleNames();

          这将返回一个包含用户附加到的所有角色的集合。

          【讨论】:

            猜你喜欢
            • 2021-01-05
            • 1970-01-01
            • 1970-01-01
            • 2011-01-05
            • 1970-01-01
            • 1970-01-01
            • 2016-04-17
            • 2021-08-07
            • 1970-01-01
            相关资源
            最近更新 更多