78 lines
2.2 KiB
PHP
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;
|
|
}
|
|
}
|