没有名为“admin”的角色。 laravel

There is no role named `admin`. laravel

我使用这个包:

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

代码:

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

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

There is no role named 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,
        ],
    ],

这是我的角色 table :

这是我的role_has_permissiontable

这是我的许可 table :

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

protected $guard_name = 'api';

将此添加到您的用户模型

use Spatie\Permission\Traits\HasRoles;

并在用户模型中 class

use HasRoles;

这是一个reference

Complete example

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

public $guard_name = 'api';

或者:

public function guardName()
{
  return 'api';
}

按照惯例,最好在配置文件中进行可配置的操作。
你代码的问题是你的守卫排列顺序,重新排列如下。

<?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 Permisions

这对我有用:

$role = Role::create(['guard_name' => 'admin', 'name' => 'manager']);