Files
OrderCheck/app/Policies/OrderPolicy.php
2026-06-15 08:13:42 +02:00

78 lines
2.2 KiB
PHP

<?php
namespace App\Policies;
use App\Models\Order;
use App\Models\User;
use Illuminate\Auth\Access\Response;
class OrderPolicy
{
/**
* Determine whether the user can view any models.
*/
public function viewAny(User $user): bool
{
return true; // Tous les agents authentifiés peuvent lister les commandes
}
/**
* Determine whether the user can view the model.
*/
public function view(User $user, Order $order): bool
{
return true; // Tous les agents authentifiés peuvent voir le détail d'une commande
}
/**
* Determine whether the user can create models.
*/
public function create(User $user): bool
{
return true; // Sylvain, Kévin et le chef de service peuvent créer des demandes (brouillons)
}
/**
* Determine whether the user can update the model.
*/
public function update(User $user, Order $order): bool
{
// Si la commande est encore au statut Brouillon, tout le monde peut la modifier
if ($order->status === 'draft') {
return true;
}
// Si elle est validée ou plus loin dans le cycle, seul le chef de service peut la modifier
return $user->isChefService();
}
/**
* Determine whether the user can delete the model.
*/
public function delete(User $user, Order $order): bool
{
// Seul le chef de service peut supprimer une commande
return $user->isChefService();
}
/**
* Détermine si l'utilisateur peut effectuer une transition spécifique.
*/
public function transition(User $user, Order $order, string $newStatus): bool
{
if ($newStatus === 'validated') {
// Seul le chef de service peut valider un brouillon
return $user->isChefService();
}
if ($newStatus === 'closed') {
// Seul le chef de service peut clôturer / archiver le dossier
return $user->isChefService();
}
// Pour les autres transitions (validated -> ordered et ordered -> delivered),
// tout agent connecté peut l'effectuer (réception de colis, transmission au fournisseur)
return true;
}
}