hasRole(['admin', 'directeur', 'raf']) || $budget->service_id === $user->service_id; } /** * Seuls les admin et directeur peuvent créer des budgets. */ public function create(User $user): bool { return $user->hasRole(['admin', 'directeur', 'raf']); } /** * Seuls les admin et directeur peuvent changer le statut d'un budget. */ public function update(User $user, Budget $budget): bool { return $user->hasRole(['admin', 'directeur']); } /** * Seuls les admin peuvent supprimer un budget. */ public function delete(User $user, Budget $budget): bool { return $user->hasRole('admin'); } /** * Un utilisateur peut ajouter une ligne budgétaire sur un budget * si le budget lui appartient (son service) ou s'il est admin/directeur/raf, * et si le budget n'est pas verrouillé. */ public function addLigne(User $user, Budget $budget): bool { if (in_array($budget->statut, ['arbitrage_direction', 'valide', 'cloture'])) { return false; } return $user->hasRole(['admin', 'directeur', 'raf']) || $budget->service_id === $user->service_id; } /** * Un utilisateur peut modifier une ligne budgétaire si : * - le budget parent lui appartient (son service) ou il est admin/directeur/raf * - le budget n'est pas verrouillé (arbitrage_direction, valide, cloture) */ public function updateLigne(User $user, LigneBudget $ligneBudget): bool { $budget = $ligneBudget->budget; if (!$budget || in_array($budget->statut, ['arbitrage_direction', 'valide', 'cloture'])) { return false; } return $user->hasRole(['admin', 'directeur', 'raf']) || $budget->service_id === $user->service_id; } /** * Un utilisateur peut supprimer une ligne budgétaire si : * - le budget parent lui appartient (son service) ou il est admin/directeur/raf * - le budget n'est pas verrouillé */ public function deleteLigne(User $user, LigneBudget $ligneBudget): bool { $budget = $ligneBudget->budget; if (!$budget || in_array($budget->statut, ['arbitrage_direction', 'valide', 'cloture'])) { return false; } return $user->hasRole(['admin', 'directeur', 'raf']) || $budget->service_id === $user->service_id; } /** * Seuls les admin, directeur et raf peuvent arbitrer les lignes budgétaires. */ public function arbitrerLigne(User $user, LigneBudget $ligneBudget): bool { return $user->hasRole(['admin', 'directeur', 'raf']); } }