Restricción de permisos para rol coordinador en asignaciones y navbar

This commit is contained in:
nickpons666
2026-01-31 02:08:38 -06:00
parent 67c4d8173f
commit 9b219c7856
10 changed files with 62 additions and 48 deletions

0
000-default.conf Normal file → Executable file
View File

0
Dockerfile Normal file → Executable file
View File

0
apache2.conf Normal file → Executable file
View File

0
config.yaml Normal file → Executable file
View File

0
docker-compose.yml Normal file → Executable file
View File

0
docker/contenedor-ibiza.conf Normal file → Executable file
View File

View File

@@ -31,28 +31,57 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
} else { } else {
$action = $_POST['action'] ?? ''; $action = $_POST['action'] ?? '';
if ($action === 'asignar') { if ($auth->isAdmin()) {
$userId = $_POST['user_id'] ?? 0; if ($action === 'asignar') {
$semana = $_POST['semana'] ?? ''; $userId = $_POST['user_id'] ?? 0;
$semana = $_POST['semana'] ?? '';
if ($userId && $semana) { if ($userId && $semana) {
$asignacionModel->asignar($userId, $semana); $asignacionModel->asignar($userId, $semana);
$message = 'Turno asignado correctamente'; $message = 'Turno asignado correctamente';
$messageType = 'success';
}
} elseif ($action === 'rotar') {
$semana = $_POST['semana'] ?? '';
$asignacionActual = $asignacionModel->getAsignacionPorSemana($semana);
if ($asignacionActual) {
$proximaPersona = $asignacionModel->getProximaPersona($asignacionActual['user_id']);
if ($proximaPersona) {
$asignacionModel->asignar($proximaPersona['id'], $semana);
$message = 'Turno rotado a: ' . htmlspecialchars($proximaPersona['nombre']);
$messageType = 'success'; $messageType = 'success';
} }
} elseif ($action === 'rotar') {
$semana = $_POST['semana'] ?? '';
$asignacionActual = $asignacionModel->getAsignacionPorSemana($semana);
if ($asignacionActual) {
$proximaPersona = $asignacionModel->getProximaPersona($asignacionActual['user_id']);
if ($proximaPersona) {
$asignacionModel->asignar($proximaPersona['id'], $semana);
$message = 'Turno rotado a: ' . htmlspecialchars($proximaPersona['nombre']);
$messageType = 'success';
}
}
} elseif ($action === 'asignar_masivo') {
$userIds = $_POST['user_ids'] ?? [];
$semanaInicio = $_POST['semana_inicio'] ?? '';
$rotacionAutomatica = isset($_POST['rotacion_automatica']) ? true : false;
if (!empty($userIds) && $semanaInicio) {
$resultado = $asignacionModel->asignarMasivo($userIds, $semanaInicio, $rotacionAutomatica);
if ($resultado['success'] > 0) {
$message = "Se asignaron {$resultado['success']} turnos correctamente";
if ($rotacionAutomatica) {
$message .= " con rotación automática para la siguiente semana";
}
$messageType = 'success';
}
if (!empty($resultado['errors'])) {
$message .= "<br>Errores: " . implode('<br>', $resultado['errors']);
$messageType = 'warning';
}
} else {
$message = 'Debes seleccionar al menos un ayudante y una semana';
$messageType = 'danger';
}
} }
} elseif ($action === 'rotacion_automatica') { }
// Acciones permitidas tanto para Admin como para Coordinador
if ($action === 'rotacion_automatica') {
$resultado = $asignacionModel->asignarSemanasFuturasAutomaticas(12); $resultado = $asignacionModel->asignarSemanasFuturasAutomaticas(12);
if ($resultado['success'] > 0) { if ($resultado['success'] > 0) {
@@ -67,30 +96,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$message = 'No se pudieron generar asignaciones: ' . implode(', ', $resultado['errors']); $message = 'No se pudieron generar asignaciones: ' . implode(', ', $resultado['errors']);
$messageType = 'danger'; $messageType = 'danger';
} }
} elseif ($action === 'asignar_masivo') {
$userIds = $_POST['user_ids'] ?? [];
$semanaInicio = $_POST['semana_inicio'] ?? '';
$rotacionAutomatica = isset($_POST['rotacion_automatica']) ? true : false;
if (!empty($userIds) && $semanaInicio) {
$resultado = $asignacionModel->asignarMasivo($userIds, $semanaInicio, $rotacionAutomatica);
if ($resultado['success'] > 0) {
$message = "Se asignaron {$resultado['success']} turnos correctamente";
if ($rotacionAutomatica) {
$message .= " con rotación automática para la siguiente semana";
}
$messageType = 'success';
}
if (!empty($resultado['errors'])) {
$message .= "<br>Errores: " . implode('<br>', $resultado['errors']);
$messageType = 'warning';
}
} else {
$message = 'Debes seleccionar al menos un ayudante y una semana';
$messageType = 'danger';
}
} }
} }
} }
@@ -177,6 +182,7 @@ $pageTitle = 'Asignación de Turnos';
<div class="alert alert-<?= $messageType ?>"><?= htmlspecialchars($message) ?></div> <div class="alert alert-<?= $messageType ?>"><?= htmlspecialchars($message) ?></div>
<?php endif; ?> <?php endif; ?>
<?php if ($auth->isAdmin()): ?>
<div class="row mb-4"> <div class="row mb-4">
<div class="col-md-6"> <div class="col-md-6">
<div class="card shadow-sm"> <div class="card shadow-sm">
@@ -297,8 +303,11 @@ No hay asignación para la semana <?= $posicionSinAsignar ?> de 4 (<?= date('d/m
</div> </div>
</div> </div>
</div> </div>
</div>
<?php endif; ?>
<!-- Sección de Asignación Masiva --> <!-- Sección de Asignación Masiva -->
<?php if ($auth->isAdmin()): ?>
<div class="card shadow-sm mt-4"> <div class="card shadow-sm mt-4">
<div class="card-header bg-success text-white"> <div class="card-header bg-success text-white">
<h5 class="mb-0">Asignación Masiva</h5> <h5 class="mb-0">Asignación Masiva</h5>
@@ -370,6 +379,7 @@ No hay asignación para la semana <?= $posicionSinAsignar ?> de 4 (<?= date('d/m
</form> </form>
</div> </div>
</div> </div>
<?php endif; ?>
<!-- Sección de Rotación Automática --> <!-- Sección de Rotación Automática -->
<div class="card shadow-sm mt-4"> <div class="card shadow-sm mt-4">

View File

@@ -52,9 +52,11 @@ $dbName = getenv('DB_NAME') ?: 'No configurado';
<?php endif; ?> <?php endif; ?>
</ul> </ul>
<ul class="navbar-nav"> <ul class="navbar-nav">
<li class="nav-item"> <?php if ($auth->isAdmin()): ?>
<a class="nav-link <?= $currentPage === 'logs' ? 'active' : '' ?>" href="/admin/logs.php">Logs</a> <li class="nav-item">
</li> <a class="nav-link <?= $currentPage === 'logs' ? 'active' : '' ?>" href="/admin/logs.php">Logs</a>
</li>
<?php endif; ?>
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown"> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
<?= htmlspecialchars($user['nombre'] ?? 'Usuario') ?> <?= htmlspecialchars($user['nombre'] ?? 'Usuario') ?>
@@ -73,8 +75,10 @@ $dbName = getenv('DB_NAME') ?: 'No configurado';
} }
?> ?>
</span></li> </span></li>
<li><span class="dropdown-item-text d-block small text-muted"><strong>DB Host:</strong> <?= htmlspecialchars($dbHost) ?></span></li> <?php if ($auth->isAdmin()): ?>
<li><span class="dropdown-item-text d-block small text-muted"><strong>DB Name:</strong> <?= htmlspecialchars($dbName) ?></span></li> <li><span class="dropdown-item-text d-block small text-muted"><strong>DB Host:</strong> <?= htmlspecialchars($dbHost) ?></span></li>
<li><span class="dropdown-item-text d-block small text-muted"><strong>DB Name:</strong> <?= htmlspecialchars($dbName) ?></span></li>
<?php endif; ?>
<li><hr class="dropdown-divider"></li> <li><hr class="dropdown-divider"></li>
<?php if ($user['rol'] ?? '' === 'ayudante'): ?> <?php if ($user['rol'] ?? '' === 'ayudante'): ?>
<li><a class="dropdown-item" href="/cambiar-password.php">Cambiar Contraseña</a></li> <li><a class="dropdown-item" href="/cambiar-password.php">Cambiar Contraseña</a></li>

View File

@@ -42,7 +42,7 @@ fi
echo "" echo ""
echo -e "${GREEN}Building image...${NC}" echo -e "${GREEN}Building image...${NC}"
docker build -t "$FULL_IMAGE" . docker build --no-cache -t "$FULL_IMAGE" .
echo "" echo ""
read -p "¿Subir imagen al registry? (s/n): " push_confirm read -p "¿Subir imagen al registry? (s/n): " push_confirm

0
scripts/generate-env.php Normal file → Executable file
View File