getUser(); /** @var Application $application */ $application = $subject; $status = $application->getStatus(); $adminAttributes = [static::VIEW, static::DELETE, static::DISPOSE, static::STATUS]; $teamerAttributes = [static::VIEW, static::WITHDRAW, static::DELETE, static::STATUS]; if ($user->hasRole('ROLE_ADMINISTRATIVE') && in_array($attribute, $adminAttributes)) { $assignment = $application->getAssignment(); return match ($attribute) { static::VIEW, static::STATUS => Application::STATUS_REJECTED !== $status, static::DELETE => Application::STATUS_REJECTED === $status, static::DISPOSE => Application::STATUS_REJECTED !== $status && $assignment->getAvailableDispositions() > $assignment->getDispositions()->count(), default => false, }; } if ($user->hasRole('ROLE_TEAMER') && in_array($attribute, $teamerAttributes)) { $teamer = $user->getTeamer(); return match ($attribute) { static::WITHDRAW => $teamer === $application->getTeamer(), static::DELETE => $teamer === $application->getTeamer() && Application::STATUS_REJECTED === $status, static::VIEW => $teamer === $application->getTeamer() && Application::STATUS_REJECTED !== $status, default => false, }; } return false; } }