Files
coolify/docs/v5/archive/app/Policies/V5/ClusterPolicy.php.txt
T
Andras Bacsai 76030a30d4 chore(v5): archive V5 implementation and remove runtime integration
Move V5 source, migrations, UI, scripts, and tests into documentation, then remove V5 routes, models, jobs, configuration, dependencies, and application hooks.
2026-08-15 19:13:30 +02:00

65 lines
1.8 KiB
Plaintext

<?php
namespace App\Policies\V5;
use App\Models\Team;
use App\Models\User;
use App\Models\V5\Cluster;
use Illuminate\Auth\Access\Response;
class ClusterPolicy
{
/**
* Determine whether the user can view the cluster within the current team.
* Read-only, so gated on team membership alone.
*/
public function view(User $user, Cluster $cluster, Team $team): Response
{
return $this->belongsToTeam($cluster, $team);
}
/**
* Determine whether the user can create a cluster in the current team.
* There is no model to scope yet, so this is a pure role gate.
*/
public function create(User $user, Team $team): Response
{
return $this->allowIfAdmin($user, $team);
}
/**
* Determine whether the user can delete the cluster within the current team.
*/
public function delete(User $user, Cluster $cluster, Team $team): Response
{
$scope = $this->belongsToTeam($cluster, $team);
if ($scope->denied()) {
return $scope;
}
return $this->allowIfAdmin($user, $team);
}
/**
* Members may read but not mutate; only admins/owners of the team pass.
*/
private function allowIfAdmin(User $user, Team $team): Response
{
return $user->isAdminOfTeam($team->id)
? Response::allow()
: Response::deny('You do not have permission to manage clusters in this team.');
}
/**
* Clusters outside the current team must stay invisible, so mismatches
* deny as not found instead of forbidden.
*/
private function belongsToTeam(Cluster $cluster, Team $team): Response
{
return $cluster->team_id === $team->id
? Response::allow()
: Response::denyAsNotFound();
}
}