为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕哥9229398 2021-10-22 15:05:56
我想问一下 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 界面没有正确显示角色用户角色显示为“-”,角色显示为 -当我检查数据库时,model_has_roles 将 App\User 显示为模型类型应用\用户模型_类型:我确定 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我的选择是什么?为什么我不能用默认配置正常播种?
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

创建角色和权限时,您应该使用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对象来分配角色或权限。


查看完整回答
反对 回复 2021-10-22
  • 2 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信