0

我正在使用Spatie 角色权限来处理 laravel 应用程序中的用户角色。我使用工厂创建了用户factory(App\User::class, 50)->create();,现在一些用户是管理员角色。我想将所有角色替换为订阅者,并且只有一个用户是管理员。

我为生成管理员用户创建了一个播种器并为该用户添加了角色

$user = User::create([
    'name_first' => 'Admin',
    'email' => 'admins@admins.com',
    'password' => bcrypt('admins@admins.com')
]);

$user->assignRole('super-admin');

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

4

2 回答 2

10

如果您的用户刚刚由工厂创建并且没有分配任何角色,您可以遍历它们并分配您想要的角色,或者获取角色并将用户关系与工厂返回的用户集合同步。

如果您想一一遍历它们:

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每个用户转到您想要的角色,或者您可以尝试角色与所有用户attachusers关系。

Role::findByName('subscription')->users()->sync(User::pluck('id'));

但是哦,不,这个答案中有角色这个词,这意味着它必须从别人的答案中复制。方法也用过,assignRole所以也一定是副本。该变量$user也被使用,所以显然是一个副本。

于 2019-12-06T07:18:40.330 回答
-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方法中传递它。

我希望它对你有帮助。谢谢

于 2019-12-06T06:46:31.910 回答