我正在使用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');
Run Code Online (Sandbox Code Playgroud)
如何使用播种机实现这一目标?或者任何其他选项可用于此?
如果您的用户刚刚由工厂创建并且尚未分配任何角色,您可以遍历它们并分配您想要的角色,或者获取角色并将用户关系与从工厂返回的用户集合同步。
如果你想一一遍历它们:
factory(App\User::class, 50)->create()->each(function ($user) {
$user->assignRole('subscription'); // assuming 'supscription' was a typo
});
Run Code Online (Sandbox Code Playgroud)
如果您想尝试附加角色的用户:
$users = factory(App\User::class, 50)->create();
$role = Role::findByName('subscription');
$role->users()->attach($users);
Run Code Online (Sandbox Code Playgroud)
如果您在播种前没有清除数据库,那么您将拥有一堆从先前运行播种机中创建的旧用户。您可以将数据库中的所有用户和assignRole每个用户旋转到您想要的角色,或者您可以尝试与所有用户建立角色attach的users关系。
Role::findByName('subscription')->users()->sync(User::pluck('id'));
Run Code Online (Sandbox Code Playgroud)
但是哦不,这个答案中有角色这个词,这意味着它必须从其他人的答案中复制。该assignRole方法也被使用,所以它也必须是一个副本。变量$user也被使用了,所以很明显是一个副本。
在你的播种机中试试这个:
创建用户后你可以这样做
// 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]));
Run Code Online (Sandbox Code Playgroud)
基本上你不能在方法中添加字符串,assignRole你可以添加模型的Object字符串Role。如果您已经创建了角色,那么您可以在此处通过名称找到角色,然后可以在方法中传递它assigRole。
我希望它对你有帮助。谢谢
| 归档时间: |
|
| 查看次数: |
5710 次 |
| 最近记录: |