Laravel 背包许可播种 "role does not exist"
Laravel Backpack Permission seeding "role does not exist"
我想在 Laravel BackPack 权限管理器中询问有关播种的问题,
我正在尝试默认的 Backpack Permission Manager 配置,并尝试用虚拟数据为它播种。
这是我的角色和权限播种器方法:
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 作为模型类型
App\User model_type:
我确定 model_type 应该是 App\Models\BackpackUser ,所以我现在再次尝试使用 BackpackUser class
进行播种
现在我遇到了不同的问题,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
我有什么选择?为什么我不能使用默认配置正常播种?
请不要说我需要使用用户界面手动“播种”虚拟数据..
创建角色和权限时,应使用 backpack_guard_name()
:
定义背包守卫
Permission::create([
'name' => 'view members',
'guard_name' => backpack_guard_name()
]);
对角色执行相同操作:
Role::create([
'name' => 'super-admin',
'guard_name' => backpack_guard_name()
]);
在你的table上,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');
}
注:
BackpackUser
extends App\User
,这可能会给你带来问题,因为你的 User
可能有自定义字段,而使用 BackpackUser
你在创建时没有这些它在工厂。
要解决这个问题,您需要分两步完成。首先,创建包含所有必填字段的 App\User
,然后将用户作为 BackpackUser
对象获取以分配角色或权限。
此问题由 Spatie/Laravel-permission 引起,还将模型类型存储在数据库中,并将权限放在 BackpackUser 或 User 模型上。
嗯..最近刚从这里得到答案:
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
提供的中间件
我想在 Laravel BackPack 权限管理器中询问有关播种的问题,
我正在尝试默认的 Backpack Permission Manager 配置,并尝试用虚拟数据为它播种。
这是我的角色和权限播种器方法:
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 作为模型类型
App\User model_type:
我确定 model_type 应该是 App\Models\BackpackUser ,所以我现在再次尝试使用 BackpackUser class
进行播种现在我遇到了不同的问题,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
我有什么选择?为什么我不能使用默认配置正常播种?
请不要说我需要使用用户界面手动“播种”虚拟数据..
创建角色和权限时,应使用 backpack_guard_name()
:
Permission::create([
'name' => 'view members',
'guard_name' => backpack_guard_name()
]);
对角色执行相同操作:
Role::create([
'name' => 'super-admin',
'guard_name' => backpack_guard_name()
]);
在你的table上,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');
}
注:
BackpackUser
extends App\User
,这可能会给你带来问题,因为你的 User
可能有自定义字段,而使用 BackpackUser
你在创建时没有这些它在工厂。
要解决这个问题,您需要分两步完成。首先,创建包含所有必填字段的 App\User
,然后将用户作为 BackpackUser
对象获取以分配角色或权限。
此问题由 Spatie/Laravel-permission 引起,还将模型类型存储在数据库中,并将权限放在 BackpackUser 或 User 模型上。
嗯..最近刚从这里得到答案:
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
提供的中间件