Replace old team system with work teams (equipos de trabajo)

- New migration 003_teams.sql: teams, team_user, team_server tables
- New Team model with CRUD, members, and server assignment
- New TeamController with full team management
- New views: teams/index, teams/create, teams/show
- Server model: getUserRole and getAccessibleServerIds now include team-based access
- Sidebar: Teams link under Administration (admin+ only)
- Routes: old /team routes removed, new /teams routes added
- Removed old ServerController team methods and views
- Fixed sidebar empty accessible IDs returning all servers
- Fixed dashboard and API to show empty when no accessible servers
This commit is contained in:
2026-06-07 07:08:26 -04:00
parent 5f5de248c6
commit 5607a3e507
14 changed files with 941 additions and 418 deletions

View File

@@ -211,12 +211,31 @@ class Server
return 'owner';
}
$assignment = $this->db->fetch(
$direct = $this->db->fetch(
'SELECT role FROM server_user WHERE server_id = ? AND user_id = ?',
[$serverId, $userId]
);
return $assignment ? $assignment['role'] : null;
$teamRole = $this->db->fetch(
'SELECT ts.role FROM team_user tu
JOIN team_server ts ON tu.team_id = ts.team_id
WHERE tu.user_id = ? AND ts.server_id = ?
ORDER BY FIELD(ts.role, \'manager\', \'viewer\')
LIMIT 1',
[$userId, $serverId]
);
$directRole = $direct ? $direct['role'] : null;
$teamRoleValue = $teamRole ? $teamRole['role'] : null;
if ($directRole === 'manager' || $teamRoleValue === 'manager') {
return 'manager';
}
if ($directRole === 'viewer' || $teamRoleValue === 'viewer') {
return 'viewer';
}
return null;
}
public function getAccessibleServerIds(int $userId): array
@@ -231,6 +250,13 @@ class Server
[$userId]
);
$teamServerIds = $this->db->fetchAll(
'SELECT DISTINCT ts.server_id FROM team_user tu
JOIN team_server ts ON tu.team_id = ts.team_id
WHERE tu.user_id = ?',
[$userId]
);
$ids = [];
foreach ($owned as $row) {
$ids[] = (int) $row['id'];
@@ -238,6 +264,9 @@ class Server
foreach ($assigned as $row) {
$ids[] = (int) $row['server_id'];
}
foreach ($teamServerIds as $row) {
$ids[] = (int) $row['server_id'];
}
return array_unique($ids);
}