Laravel Backpack 权限播种“角色不存在”

我想问一下 Laravel BackPack Permission Manager 中的 Seeding,


我正在尝试默认的背包权限管理器配置,并尝试使用虚拟数据为其播种。


这是我的角色和权限播种机方法:


    public function run()

    {

        // Reset cached roles and permissions

        app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();


        // create permissions

        Permission::create(['name' => 'view members']);

        Permission::create(['name' => 'add members']);

        Permission::create(['name' => 'edit members']);

        Permission::create(['name' => 'delete members']);


        Role::create(['name' => 'super-admin'])

            ->givePermissionTo(Permission::all());


        Role::create(['name' => 'admin'])

            ->givePermissionTo('add members');

    }

这是我的用户播种器方法:


    public function run()

    {

        factory(User::class)->create([

            'name' => 'Arianna',

            'email' => 'arianna@example.com'

        ])->assignRole('super-admin');

    }

这些播种机很好,但我意识到用户 CRUD 界面没有正确显示角色


用户角色显示为“-”,


角色显示为 -

http://img.mukewang.com/617262e90001a92419150300.jpg

当我检查数据库时,model_has_roles 将 App\User 显示为模型类型

应用\用户模型_类型:

http://img1.mukewang.com/617262f50001cd7b04520071.jpg

我确定 model_type 应该是 App\Models\BackpackUser ,所以我现在再次尝试使用 BackpackUser 类进行播种


现在我遇到了不同的问题,BackpackUser 没有任何角色,因为角色需要在“背包”守卫中才能分配给 BackpackUser


 Spatie\Permission\Exceptions\RoleDoesNotExist  : There is no role named `super-admin`.


  at .\vendor\spatie\laravel-permission\src\Exceptions\RoleDoesNotExist.php:11

     7| class RoleDoesNotExist extends InvalidArgumentException

     8| {

     9|     public static function named(string $roleName)

    10|     {

  > 11|         return new static("There is no role named `{$roleName}`.");

    12|     }

    13|

    14|     public static function withId(int $roleId)

    15|     {


  Exception trace:


  1   Spatie\Permission\Exceptions\RoleDoesNotExist::named("super-admin")

      .\vendor\spatie\laravel-permission\src\Models\Role.php:91


  2   Spatie\Permission\Models\Role::findByName("super-admin", "backpack")

      .\vendor\spatie\laravel-permission\src\Traits\HasRoles.php:270


我的选择是什么?为什么我不能用默认配置正常播种?


慕哥9229398
浏览 175回答 2
2回答

守着星空守着你

创建角色和权限时,您应该使用backpack_guard_name()以下命令定义背包守卫:Permission::create([    'name' => 'view members',    'guard_name' => backpack_guard_name()]);对角色执行相同操作:Role::create([    'name' => 'super-admin',    'guard_name' => backpack_guard_name()]);在你的桌子上,model_has_roles你的模型类型不能是App\User,它应该是Backpack\Base\app\Models\BackpackUser:use \Backpack\Base\app\Models\BackpackUser;...public function run(){    factory(BackpackUser::class)->create([        'name' => 'Arianna',        'email' => 'arianna@example.com'    ])->assignRole('super-admin');}笔记:BackpackUserextends App\User,这可能会给您带来问题,因为您User可能有自定义字段,并且通过使用BackpackUser您在工厂中创建它时没有这些字段。要解决这个问题,您需要分两步完成。首先,App\User使用所有必填字段创建,然后将用户作为BackpackUser对象来分配角色或权限。
打开App,查看更多内容
随时随地看视频慕课网APP