Fix: corregir lógica de permisos

1. Cualquier usuario puede crear ingresos en cualquier cama
2. Cualquier usuario puede ver todos los pacientes
3. Solo usuarios del área pueden modificar registros de su área
4. Solo usuarios del área pueden cambiar la cama de una internación
This commit is contained in:
2026-04-24 00:28:16 -03:00
parent d0b25480c9
commit c54aa09b15
+10 -22
View File
@@ -210,16 +210,6 @@ export function useHospitalStore() {
// Acciones de internaciones
const iniciarInternacion = useCallback((internacion: Omit<Internacion, 'id' | 'activa'>) => {
const user = state.currentUser;
const areaId = internacion.areaId || null;
const area = state.areas.find(a => a.id === areaId);
const esFueraDeArea = area && (area.nombre || '').trim().toLowerCase() === 'fuera de area';
if (user && user.rol !== 'admin' && !esFueraDeArea) {
if (!user.areaId || user.areaId !== areaId) {
console.warn('No tiene permisos para iniciar internación en esta área');
return null;
}
}
const nuevaInternacion: Internacion = {
...internacion,
id: generateUUID(),
@@ -230,12 +220,12 @@ export function useHospitalStore() {
internaciones: [...prev.internaciones, nuevaInternacion],
camaS: prev.camas.map(c =>
c.id === internacion.camaId
? { ...c, estado: 'Ocupada', pacienteId: internacion.pacienteId, internacionId: nuevaInternacion.id }
? { ...c, estado: 'Ocupada' as const, pacienteId: internacion.pacienteId, internacionId: nuevaInternacion.id }
: c
),
}));
return nuevaInternacion.id;
}, [state.currentUser, state.areas]);
}, []);
const finalizarInternacion = useCallback((internacionId: string, datos: {
fechaEgreso: string;
@@ -273,15 +263,16 @@ const finalizarInternacion = useCallback((internacionId: string, datos: {
if (!internacion) return;
const user = state.currentUser;
const areaId = internacion.areaId || null;
const area = state.areas.find(a => a.id === areaId);
const esFueraDeArea = area && (area.nombre || '').trim().toLowerCase() === 'fuera de area';
if (user && user.rol !== 'admin' && !esFueraDeArea && areaId && user.areaId !== areaId) {
console.warn('No tiene permisos para actualizar internación en esta área');
return;
}
const oldCamaId = internacion.camaId;
const newCamaId = datos.camaId;
const cambioDeCama = newCamaId && newCamaId !== oldCamaId;
if (cambioDeCama && user && user.rol !== 'admin' && areaId && user.areaId !== areaId) {
console.warn('No tiene permisos para cambiar la cama de esta internación');
return;
}
const pacienteId = datos.pacienteId || internacion.pacienteId;
setState(prev => {
@@ -933,11 +924,8 @@ const getEstadisticas = useCallback(() => {
if (!user) return false;
if (user.rol === 'admin') return true;
if (!areaId) return false;
const area = state.areas.find(a => a.id === areaId);
const esFueraDeArea = area && (area.nombre || '').trim().toLowerCase() === 'fuera de area';
if (esFueraDeArea) return true;
return user.areaId === areaId;
}, [state.currentUser, state.areas]);
}, [state.currentUser]);
const canEditCama = useCallback((camaId: string): boolean => {
const areaId = getCamaAreaId(camaId);