mirror of
https://github.com/tiennm99/coolify.git
synced 2026-09-01 16:17:49 +00:00
Split V5 dashboard behavior into domain controllers and policies, add agent token rotation/revocation, status reconciliation jobs, ingress firewall syncing, and canvas connection APIs. Add migrations for V5 status tracking, server capabilities, resource connection aliases, and revoked agent tokens.
59 lines
1.5 KiB
PHP
59 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware\V5;
|
|
|
|
use App\Models\Team;
|
|
use App\Models\User;
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class EnsureCurrentTeam
|
|
{
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
/** @var User|null $user */
|
|
$user = $request->user();
|
|
|
|
if (! $user) {
|
|
return $next($request);
|
|
}
|
|
|
|
$currentTeam = $this->resolveCurrentTeam($user);
|
|
|
|
if (! $currentTeam) {
|
|
abort(403, 'No team available for this user.');
|
|
}
|
|
|
|
// The v4 UI stores a full Team model under the same session key and
|
|
// reads arbitrary columns off it, so only rewrite the session when the
|
|
// resolved team actually changed — and always store the full model.
|
|
if (data_get(session('currentTeam'), 'id') !== $currentTeam->id) {
|
|
session(['currentTeam' => $currentTeam]);
|
|
}
|
|
|
|
$request->attributes->set('v5.currentTeam', $currentTeam);
|
|
|
|
return $next($request);
|
|
}
|
|
|
|
private function resolveCurrentTeam(User $user): ?Team
|
|
{
|
|
$sessionTeamId = data_get(session('currentTeam'), 'id');
|
|
|
|
if ($sessionTeamId) {
|
|
$sessionTeam = $user->teams()
|
|
->whereKey($sessionTeamId)
|
|
->first();
|
|
|
|
if ($sessionTeam) {
|
|
return $sessionTeam;
|
|
}
|
|
}
|
|
|
|
return $user->teams()
|
|
->orderBy('teams.id')
|
|
->first();
|
|
}
|
|
}
|