如何使用Spatie在laravel中使用播种器向所有用户添加分配角色?

时间:2019-12-06 06:36:36

标签: laravel spatie

我正在使用 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');

如何用播种机实现这一目标?或任何其他选项可用于此?

2 个答案:

答案 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方法中进行传递。

我希望它会对您有所帮助。谢谢