3

我使用这个包:

https://github.com/spatie/laravel-permission/tree/v2

代码 :

     $user=User::find(2);
    $user->assignRole('admin');

当我将管理员角色分配给用户时,我正在处理这个错误

没有名为admin.Spatie\Permission\Exceptions\RoleDoesNotExist的角色

这是我在 auth.php 中的默认守卫:

    <?php

return [

    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],


    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

这是我的角色表:

在此处输入图像描述

这是我的 role_has_permission 表

在此处输入图像描述

这是我的权限表:

在此处输入图像描述

4

4 回答 4

14

只需将此受保护的属性添加到您的用户模型(或您用于分配权限和角色的任何模型)。

protected $guard_name = 'api';

于 2020-03-16T17:55:18.630 回答
1

作为惯例,最好在配置文件中做可配置的事情。
您的代码的问题是安排守卫的顺序,只需重新安排,如下所示。

<?php

return [

    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],


    'guards' => [
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    ],
 ...

完成此操作后,您无需添加protected $guard_name = 'api';User模型中,确保运行php artisan config:clear

参考:Saptie Laravel 权限

于 2021-10-24T17:23:34.993 回答
1

将此添加到您的用户模型中

use Spatie\Permission\Traits\HasRoles;

在用户模型类中

use HasRoles;

这是一个参考

完整示例

于 2021-05-24T07:38:34.037 回答
1

将以下内容之一添加到您的User模型中:

public $guard_name = 'api';

或者:

public function guardName()
{
  return 'api';
}
于 2021-08-05T02:14:43.130 回答