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;
}
}