fix: filtrar servidores por usuario/equipo segun rol #34

Merged
rafaga21 merged 2 commits from fix/server-access-filtering into master 2026-06-11 17:27:23 -04:00
6 changed files with 33 additions and 24 deletions

View File

@@ -12,8 +12,8 @@ android {
applicationId = "com.devlab.app"
minSdk = 26
targetSdk = 37
versionCode = 8
versionName = "1.6.1"
versionCode = 9
versionName = "1.7.0"
}
buildTypes {

Binary file not shown.

View File

@@ -48,10 +48,13 @@ class ApiController
public function status(): void
{
$this->authenticateRequest();
$user = $this->authenticateRequest();
$serverModel = new Server();
$accessibleIds = $serverModel->getAccessibleServerIds((int) $user['id']);
$monitoringService = new MonitoringService();
$stats = $monitoringService->getDashboardStats();
$stats = $monitoringService->getDashboardStats($accessibleIds);
$this->view->json([
'success' => true,

View File

@@ -25,20 +25,14 @@ class DashboardController
public function index(): void
{
$role = Session::get('user_role');
$serverModel = new Server();
$userId = (int) Session::get('user_id');
if ($role === 'super_admin') {
$stats = $this->monitoringService->getDashboardStats();
$servers = $serverModel->findAll(true);
} else {
$accessibleIds = $serverModel->getAccessibleServerIds($userId);
$stats = $this->monitoringService->getDashboardStats($accessibleIds);
$servers = !empty($accessibleIds) ? array_values(array_filter($serverModel->findAll(true), function ($s) use ($accessibleIds) {
return in_array((int) $s['id'], $accessibleIds, true);
})) : [];
}
$accessibleIds = $serverModel->getAccessibleServerIds($userId);
$stats = $this->monitoringService->getDashboardStats($accessibleIds);
$servers = !empty($accessibleIds) ? array_values(array_filter($serverModel->findAll(true), function ($s) use ($accessibleIds) {
return in_array((int) $s['id'], $accessibleIds, true);
})) : [];
$recentActivity = $this->auditService->getRecentActivity(10, $userId);
@@ -52,15 +46,9 @@ class DashboardController
public function stats(): void
{
$role = Session::get('user_role');
if ($role === 'super_admin') {
$stats = $this->monitoringService->getDashboardStats();
} else {
$serverModel = new Server();
$accessibleIds = $serverModel->getAccessibleServerIds((int) Session::get('user_id'));
$stats = $this->monitoringService->getDashboardStats($accessibleIds);
}
$serverModel = new Server();
$accessibleIds = $serverModel->getAccessibleServerIds((int) Session::get('user_id'));
$stats = $this->monitoringService->getDashboardStats($accessibleIds);
$this->view->json([
'success' => true,

View File

@@ -1786,6 +1786,8 @@ class ServerController
public function metrics(int $id): void
{
$server = $this->requireServerAccess($id, 'viewer');
$monitoringService = new MonitoringService();
$metrics = $monitoringService->getLatestMetrics($id);

View File

@@ -249,6 +249,22 @@ class Server
public function getAccessibleServerIds(int $userId): array
{
$user = $this->db->fetch(
'SELECT role FROM users WHERE id = ? AND status = \'active\'',
[$userId]
);
if (!$user) {
return [];
}
if ($user['role'] === 'super_admin') {
$all = $this->db->fetchAll(
'SELECT id FROM servers WHERE status = \'active\''
);
return array_map(fn($r) => (int) $r['id'], $all);
}
$owned = $this->db->fetchAll(
'SELECT id FROM servers WHERE created_by = ? AND status = \'active\'',
[$userId]