Permisos
El sistema de permisos controla el acceso a cada herramienta/módulo de la plataforma con 4 niveles de granularidad. Los permisos se asignan por usuario o por equipo, y se combinan con los roles globales.
Niveles de permiso
none → view → edit → admin
| Nivel | Descripción |
|---|
none | Sin acceso al módulo |
view | Solo lectura |
edit | Lectura y escritura |
admin | Control total (incluye gestión de usuarios y configuración) |
La jerarquía es acumulativa: un usuario con nivel admin tiene automáticamente acceso edit y view.
Resolución de permisos
El permiso efectivo de un usuario para un módulo se resuelve con la siguiente prioridad:
- Permiso de usuario — Asignación directa al usuario para ese módulo
- Permiso de equipo — Si no hay permiso individual, se usa el del equipo
- Default por rol — Si no hay permiso de equipo, se aplica el default del rol global
Módulos y grupos
Los módulos (herramientas) se organizan en grupos para la vista del home:
- Cada módulo tiene un
app_type: tool (herramienta nativa) o link (enlace externo)
- Los grupos definen el orden de visualización en el dashboard
- La visibilidad se controla por equipo: un grupo o módulo puede ser visible solo para ciertos equipos
Layout personalizado
Cada usuario puede personalizar su layout del home:
- Reordenar módulos y grupos
- El layout se guarda en la base de datos
- Se puede resetear al layout por defecto
API
Módulos para el usuario
| Método | Endpoint | Descripción |
|---|
| GET | /permissions/modules/home | Módulos visibles para el usuario actual |
| GET | /permissions/modules/home-layout | Layout con grupos y módulos |
| GET/PUT/DELETE | /permissions/modules/my-layout | Layout personalizado |
Administración de módulos (Admin)
| Método | Endpoint | Descripción |
|---|
| GET | /permissions/modules/admin | Todos los módulos con info de visibilidad |
| POST | /permissions/modules | Crear módulo |
| PATCH | /permissions/modules/:id | Actualizar módulo |
| DELETE | /permissions/modules/:id | Eliminar módulo |
| POST | /permissions/modules/:id/upload-icon | Subir ícono (máx 2MB, solo imagen) |
Grupos (Admin)
| Método | Endpoint | Descripción |
|---|
| GET | /permissions/modules/groups | Listar grupos |
| POST | /permissions/modules/groups | Crear grupo |
| PATCH | /permissions/modules/groups/:id | Actualizar grupo |
| DELETE | /permissions/modules/groups/:id | Eliminar grupo |
| GET/PUT | /permissions/modules/groups/:id/visibility | Visibilidad por equipo |
| GET/PUT | /permissions/modules/:id/visibility | Visibilidad de módulo por equipo |
Asignación de permisos (Admin)
| Método | Endpoint | Descripción |
|---|
| GET | /permissions/user/:userId | Permisos del usuario |
| POST | /permissions/user/:userId | Asignar permiso a usuario |
| GET | /permissions/team/:teamId | Permisos del equipo |
| POST | /permissions/team/:teamId | Asignar permiso al equipo |
| GET | /permissions/user/:userId/module/:slug | Verificar permiso específico |
| GET | /permissions/user/:userId/access | Acceso completo del usuario a módulos |
Filtrado de módulos visibles
El método getHomeModules filtra los módulos usando estas reglas:
- Auth0 tools: módulos asignados en los claims del JWT
- Módulos personales: módulos creados por el propio usuario
- Visibilidad por equipo: módulos visibles para los equipos del usuario
- Módulos globales: módulos marcados como visibles para todos
El sistema de permisos se aplica tanto en el frontend (renderizado condicional de módulos) como en el backend (guards de acceso en cada endpoint).