Php 没有名为“Admin”的角色`
我尝试使用Spatial包和laracasts/flash包创建角色和权限。我遵循这个教程 但当我想迁移并授予权限时,我遇到了以下错误: ?[41;1m空间\权限\例外\角色不存在?[49;22m ?[39;1m没有名为Php 没有名为“Admin”的角色`,php,laravel,roles,laravel-8,spatie,Php,Laravel,Roles,Laravel 8,Spatie,我尝试使用Spatial包和laracasts/flash包创建角色和权限。我遵循这个教程 但当我想迁移并授予权限时,我遇到了以下错误: ?[41;1m空间\权限\例外\角色不存在?[49;22m ?[39;1m没有名为Admin?[39;22m]的角色 位于?[32mC:\xampp\htdocs\larashop\vendor\spatie\laravel permission\src\Exceptions\RoleDoesNotExist.php?[39m:?[32m11?[39m 7–类
Admin
?[39;22m]的角色
位于?[32mC:\xampp\htdocs\larashop\vendor\spatie\laravel permission\src\Exceptions\RoleDoesNotExist.php?[39m:?[32m11?[39m
7–类RoleDesNotexist扩展了InvalidArgumentException
8â–• {
9–名为的公共静态函数(字符串$roleName)
10â–• {
–žœ11–返回新静态(“没有名为{$roleName}
的角色”);
12â–• }
13â–•
14–带ID的公共静态函数(int$roleId)
15–15{
?[33m1?[39m?[39;1mC:\xampp\htdocs\larashop\vendor\spatie\laravel permission\src\Models\Role.php?[39;22m:[39;1m89?[39;22m]
[37m空间\权限\例外\RoleDesNotexist::命名(“管理员”)?[39m
?[33m2?[39m?[39;1mC:\xampp\htdocs\larashop\vendor\spatie\laravel permission\src\Traits\HasRoles.php?[39;22m:[39;1m276?[39;22m]
[37m空间\权限\模型\角色::findByName(“管理员”、“api”)?[39m
我已经尝试为我的用户模型提供受保护的$guard\u name='api';
并尝试将auth.php文件
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
这是我的用户模型
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasFactory, Notifiable, HasRoles;
protected $guard_name ='api';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function products()
{
return $this->hasMany('App\Models\Product');
}
}
<?php
namespace Database\Seeders;
use App\Models\Permission;
use App\Models\Role;
use App\Models\User;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @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
$permissions = Permission::defaultPermissions();
foreach ($permissions as $perms) {
Permission::firstOrCreate(['name' => $perms]);
}
$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)]);
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.');
}
}
/**
* Create a user with given role
*
* @param $role
*/
private function createUser($role)
{
$user = User::factory()->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 "password"');
}
}
}