Laravel 9 : wrong roles (spatie/laravel-permission)



我使用Laravel 9, breeze和package space/Laravel -permission,我做了一些修改,以便能够在认证后分配一个角色:(我检查了"id_role"一栏中的数字;从我的表用户到已知的角色)

AuthenticatedSessionController:

public function store(LoginRequest $request)
{
$request->authenticate();
$request->session()->regenerate();
$user = Auth::user();
if ($user->id_role==2) {
$user->assignRole('admin');
}
if($user->id_role==1)
{
$user->assignRole('user');
}
//test
return redirect('/');
//return redirect()->intended(RouteServiceProvider::HOME);
}

我使用下面的种子器来创建这些角色:

class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// Reset cached roles and permissions
app()[PermissionRegistrar::class]->forgetCachedPermissions();
// create permissions
Permission::create(['name' => 'edit comments']);
Permission::create(['name' => 'delete comments']);
Permission::create(['name' => 'create comments']);
Permission::create(['name' => 'edit projects']);
Permission::create(['name' => 'delete projects']);
Permission::create(['name' => 'create projects']);
Permission::create(['name' => 'delete images']);
Permission::create(['name' => 'create images']);
// create roles and assign existing permissions
$role1 = Role::create(['name' => 'user']);
$role1->givePermissionTo('edit comments');
$role1->givePermissionTo('delete comments');
$role1->givePermissionTo('create comments');
$role2 = Role::create(['name' => 'Super-Admin']);

}
class Database2Seeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$role1 = Role::create(['name' => 'admin']);
$role1->givePermissionTo('edit comments');
$role1->givePermissionTo('delete comments');
$role1->givePermissionTo('create comments');
}
}

但问题是,每次我作为'admin'登录时,我都有'admin'和'user'的角色。

就像在这个刀片(视图)中同时看到两个角色的内容:

@foreach ($comments as $comment)
<tr>
<td>"{{ $comment->com }}"</td>
<br>
@role('user')
USER
@endrole
@role('admin')
<a class="btn btn-primary" href="{{ route('comments.destroy',$comment->id)  }}">Delete</a>
@endrole
@foreach ($comments as $comment)
<tr>
<td>"{{ $comment->com }}"</td>
<br>
@role('user')
USER
@endrole
@role('admin')
<a class="btn btn-primary" href="{{ route('comments.destroy',$comment->id)  }}">Delete</a>
@endrole

您似乎将这两个角色都分配给了用户。

检查models_has_roles表并删除额外分配的角色。

最新更新