我想问一下拉勒维尔BackPack的许可经理,
我正在尝试默认的背包权限管理器配置,并尝试用虚拟数据为其添加种子。
下面是我的角色和权限播种机方法:
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');
}这些Seeder很好,但我意识到用户CRUD界面没有正确显示角色
用户角色显示为"-",
角色显示为-

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

我确信model_type应该是App\Model\ 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我有什么选择?为什么我不能在默认配置的情况下正常播种呢?
请不要说我需要使用用户界面手动“种子”虚拟数据。
发布于 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提供的中间件。
发布于 2019-07-24 11:17:46
在创建角色和权限时,应使用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');
}注意:
BackpackUser扩展了App\User,这可能会给您带来问题,因为您的User可能有自定义字段,而使用BackpackUser在工厂中创建它时没有这些字段。
要解决这个问题,您需要分两步完成。首先,使用所有必需的字段创建App\User,然后将用户作为BackpackUser对象来分配角色或权限。
https://stackoverflow.com/questions/57143878
复制相似问题