Aller au contenu principal

Flux de permissions

Flux

1. Le middleware de route authentifie l'utilisateur
2. Le contrôleur ou middleware vérifie la permission
3. La Policy vérifie l'accès spécifique au modèle
4. Le service valide les contraintes métier
5. La décision sensible est loggée si approprié

Pattern correct

// ✅ BIEN
public function assignRole(AssignRoleRequest $request, User $user): RedirectResponse
{
$this->authorize('assignRole', $user);
$this->userService->assignRole($user, Role::findOrFail($request->id_role));
return redirect()->back()->with('success', 'Rôle assigné.');
}

Pattern interdit

// ❌ MAL — vérification de rôle brute, pas de transaction, pas de log
if (auth()->user()->is_admin) {
$user->roles()->attach($roleId);
}

Policy exemple

class UserPolicy
{
public function assignRole(User $authUser, User $targetUser): bool
{
// Seul un admin peut assigner un rôle
// Un utilisateur ne peut pas modifier son propre rôle
return $authUser->is_admin && $authUser->id !== $targetUser->id;
}
}