首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel背包许可播种“角色不存在”

Laravel背包许可播种“角色不存在”
EN

Stack Overflow用户
提问于 2019-07-22 09:36:21
回答 2查看 4.6K关注 0票数 0

我想问一下拉勒维尔BackPack的许可经理,

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

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

代码语言:javascript
复制
    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');
    }

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

代码语言:javascript
复制
    public function run()
    {
        factory(User::class)->create([
            'name' => 'Arianna',
            'email' => 'arianna@example.com'
        ])->assignRole('super-admin');
    }

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

用户角色显示为"-",

角色显示为-

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

App\User model_type:

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

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

代码语言:javascript
复制
 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

我有什么选择?为什么我不能在默认配置的情况下正常播种呢?

请不要说我需要使用用户界面手动“种子”虚拟数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-25 13:58:51

由空间/Laravel权限引起的问题还会将模型类型存储在db中,并将权限放在BackpackUser或用户模型上。

好吧..。最近才从这里得到答案:

https://github.com/Laravel-Backpack/PermissionManager/issues/193](https://github.com/Laravel-Backpack/PermissionManager/issues/193])

解决方案是在2019年年底从tabacitu添加的:

https://backpackforlaravel.com/docs/4.0/base-about#having-both-regular-users-and-admins

基本上,您需要添加中间件,或者在用户上添加is_admin列,或者使用tabacitu提供的中间件。

票数 0
EN

Stack Overflow用户

发布于 2019-07-24 11:17:46

在创建角色和权限时,应使用backpack_guard_name()定义背包保护。

代码语言:javascript
复制
Permission::create([
    'name' => 'view members',
    'guard_name' => backpack_guard_name()
]);

对角色也要这样做:

代码语言:javascript
复制
Role::create([
    'name' => 'super-admin',
    'guard_name' => backpack_guard_name()
]);

在您的表上,model_has_roles您的模型类型不能是App\User,它应该是Backpack\Base\app\Models\BackpackUser

代码语言:javascript
复制
use \Backpack\Base\app\Models\BackpackUser;
...

public function run()
{
    factory(BackpackUser::class)->create([
        'name' => 'Arianna',
        'email' => 'arianna@example.com'
    ])->assignRole('super-admin');
}

注意:

BackpackUser扩展了App\User,这可能会给您带来问题,因为您的User可能有自定义字段,而使用BackpackUser在工厂中创建它时没有这些字段。

要解决这个问题,您需要分两步完成。首先,使用所有必需的字段创建App\User,然后将用户作为BackpackUser对象来分配角色或权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57143878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档