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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user