Sistema de Permisos en el Frontend
La gestión de permisos es un aspecto crítico que garantiza que los usuarios solo puedan ver y realizar acciones para las que están autorizados.
1. Arquitectura de Permisos
Utilizamos un modelo RBAC (Role-Based Access Control) gestionado centralmente e implementado de forma distribuida.
- Servicio de Permisos: El Shell carga los permisos del usuario al inicio de la sesión.
- Provider de Permisos: Los microfrontends consumen estos permisos a través de un contexto compartido o del objeto global
window.
2. Implementación de Guards
Page Guard (Protección de Rutas)
Impide que el usuario acceda a una página completa si no tiene el permiso de lectura (view).
<PageGuard permission="inventory.view">
<InventoryPage />
</PageGuard>
Component Guard (Protección de Acciones)
Oculta botones o elementos de UI específicos basados en permisos de acción (create, update, delete).
<AccessGuard permission="inventory.delete">
<Button color="error">Eliminar Ítem</Button>
</AccessGuard>
3. Verificación Programática
En ocasiones, es necesario verificar permisos dentro de la lógica de una función (ej. antes de disparar una petición API).
const { checkPermission } = usePermissions();
const handleExport = async () => {
if (await checkPermission("inventory.export")) {
// Proceder con la descarga
} else {
notify("No tienes permisos para exportar");
}
};
4. Mejores Prácticas
- Fail-Safe: Por defecto, el sistema debe denegar el acceso si no puede verificar los permisos.
- Sincronización Backend: Recuerda que la seguridad en el frontend es solo cosmética. El backend siempre debe validar los permisos de nuevo al recibir la petición.
- Carga Diferida: Los permisos deben estar disponibles antes de que se rendericen los componentes críticos para evitar parpadeos en la UI.