php - Spatie/Laravel-Permissions:虚拟数据错误
问题描述
我正在使用 Laravel 和 spatie/laravel-permission 包,如本教程中所述。但是,当我尝试创建虚拟数据时,它返回以下错误Spatie\Permission\Exceptions\RoleDoesNotExist : There is no role named Admin
。
下面是生成虚拟数据的类。
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// Ask for db migration refresh, default is no
if ($this->command->confirm('Do you wish to refresh migration before seeding, it will clear all old data ?')) {
// Call the php artisan migrate:refresh
$this->command->call('migrate:refresh');
$this->command->warn("Data cleared, starting from blank database.");
}
// Seed the default permissions
Permission::firstOrCreate(['name' => 'Administer roles & permissions', 'guard_name' => 'isAdmin']);
$this->command->info('Default Permissions added.');
// Confirm roles needed
if ($this->command->confirm('Create Roles for user, default is admin and user? [y|N]', true)) {
// Ask for roles from input
$input_roles = $this->command->ask('Enter roles in comma separate format.', 'Admin,User');
// Explode roles
$roles_array = explode(',', $input_roles);
// add roles
foreach($roles_array as $role) {
$role = Role::firstOrCreate(['name' => trim($role), 'guard_name' => 'isAdmin']);
if( $role->name == 'Admin' ) {
// assign all permissions
$role->syncPermissions(Permission::all());
$this->command->info('Admin granted all the permissions');
} else {
// for others by default only read access
$role->syncPermissions(Permission::where('name', 'LIKE', 'view_%')->get());
}
// create one user for each role
$this->createUser($role);
}
$this->command->info('Roles ' . $input_roles . ' added successfully');
} else {
Role::firstOrCreate(['name' => 'User']);
$this->command->info('Added only default user role.');
}
// now lets seed some posts for demo
$this->command->info('Some Posts data seeded.');
$this->command->warn('All done :)');
}
/**
* Create a user with given role
*
* @param $role
*/
private function createUser($role)
{
$user = factory(User::class)->create();
$user->assignRole($role->name);
if( $role->name == 'Admin' ) {
$this->command->info('Here is your admin details to login:');
$this->command->warn($user->email);
$this->command->warn('Password is "secret"');
}
}
}
有什么办法解决吗?
解决方案
你需要跑
php artisan cache:forget spatie.permission.cache
使用角色或权限之前
推荐阅读
- perl - 在 Perl 中从管道中读取 X 个字节
- mysql - 如何停止订购 CONCAT REGEXP MySQL
- sql - SQL - 如何从字符串中删除空格字符
- python - 将熊猫数据框每列的总数(总和,计数)添加到 csv 文件中
- mongodb - Golang MongoDB 驱动排序
- python-3.x - 使用 BeautifulSoup 抓取数据
- c# - 在 Service Fabric 应用程序中下载 2 GB 文件
- text - 将隐藏数据添加到文本文件
- scala - 如何生成随机的 unicode 字符串?
- ios - ISBX/apprtc-ios 在 iOS 13 上不起作用 - 没有视频预览