5feceb0882
Le Gate Laravel se comporte différemment selon que le 1er argument est une classe string ou une instance : - [Releve::class, $source] → Gate passe $source directement (vue + contrôleurs) - [app(Releve::class), $source] → Gate injecte l'instance + $source (ancien StoreReleveRequest) Correction : revenir aux signatures originales (User, Source) et remplacer app(Releve::class) par Releve::class dans StoreReleveRequest pour uniformiser. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
43 lines
994 B
PHP
43 lines
994 B
PHP
<?php
|
|
|
|
namespace App\Policies;
|
|
|
|
use App\Enums\SourceStatus;
|
|
use App\Models\Releve;
|
|
use App\Models\Source;
|
|
use App\Models\User;
|
|
|
|
class RelevePolicy
|
|
{
|
|
public function viewAny(User $user, Source $source): bool
|
|
{
|
|
return $source->isVisibleBy($user);
|
|
}
|
|
|
|
public function view(User $user, Releve $releve): bool
|
|
{
|
|
return $releve->source->isVisibleBy($user);
|
|
}
|
|
|
|
public function create(User $user, Source $source): bool
|
|
{
|
|
if ($source->status === SourceStatus::Termine) {
|
|
return false;
|
|
}
|
|
if ($user->isAdmin() || $user->isSectionManager()) {
|
|
return true;
|
|
}
|
|
return $source->membres()->where('user_id', $user->id)->exists();
|
|
}
|
|
|
|
public function update(User $user, Releve $releve): bool
|
|
{
|
|
return $this->create($user, $releve->source);
|
|
}
|
|
|
|
public function delete(User $user, Releve $releve): bool
|
|
{
|
|
return $user->isAdmin() || $user->isSectionManager();
|
|
}
|
|
}
|