我正在使用 Spatie角色权限在laravel应用程序中处理用户角色。我已经使用工厂factory(App\User::class, 50)->create();
创建了用户,现在其中一些用户是管理员角色。我想将所有角色替换为订户,并且只有一个用户是admin。
我已经创建了一个种子来生成管理员用户,并为此添加了角色
$user = User::create([
'name_first' => 'Admin',
'email' => 'admins@admins.com',
'password' => bcrypt('admins@admins.com')
]);
$user->assignRole('super-admin');
如何用播种机实现这一目标?或任何其他选项可用于此?
答案 0 :(得分:0)
如果您的用户只是由工厂创建的,尚未分配任何角色,则可以遍历他们并分配所需的角色,或者获取“角色”并将用户关系与从中返回的用户集合同步。工厂。
如果要一个接一个地遍历它们:
factory(App\User::class, 50)->create()->each(function ($user) {
$user->assignRole('subscription'); // assuming 'supscription' was a typo
});
如果您想尝试为角色附加用户:
$users = factory(App\User::class, 50)->create();
$role = Role::findByName('subscription');
$role->users()->attach($users);
如果您没有在播种之前清除数据库,那么您将拥有从先前的播种器运行创建的一堆旧用户。您可以遍历数据库中的所有用户,并将每个用户assignRole
旋转到所需的角色,也可以在attach
关系中与所有用户尝试users
。< / p>
Role::findByName('subscription')->users()->sync(User::pluck('id'));
但是,哦,不,这个答案中包含“角色”一词,这意味着它必须从其他人的答案中复制而来。也使用assignRole
方法,因此它也必须是副本。还使用了变量$user
,因此显然是一个副本。
答案 1 :(得分:-2)
在播种机中尝试一下:
创建用户后,您可以
// Create roles
$super_admin = Role::create(['name' => 'Super Admin']);
$admin = Role::create(['name' => 'Admin']);
// Assign role to user
$user->assignRole($super_admin);
// If you have to use Faker then you can also do this
$user->assignRole($faker->randomElement([$super_admin, $admin]));
基本上,您不能在assignRole
方法中添加字符串,而可以添加Object
模型的Role
。如果您已经创建了角色,则可以在此处按角色名称查找角色,然后可以在assigRole
方法中进行传递。
我希望它会对您有所帮助。谢谢