# EPICA: EPIC-MGN-003 - Roles y Permisos (RBAC) ## Metadata | Campo | Valor | |-------|-------| | **ID** | EPIC-MGN-003 | | **Nombre** | Roles y Permisos (RBAC) | | **Modulo** | roles | | **Fase** | Fase 1 - Foundation | | **Prioridad** | P0 (Critico) | | **Estado** | Ready | | **Story Points** | 26 | | **Sprint(s)** | Sprint 3 (RBAC completo) | | **Plan Detalle** | [SPRINT-PLAN-FASE-1.md](../SPRINT-PLAN-FASE-1.md) | --- ## Descripcion Sistema de control de acceso basado en roles (RBAC) que permite definir roles jerarquicos, permisos granulares por recurso/accion, asignacion de roles a usuarios, roles especificos por tenant y herencia de permisos. Es fundamental para garantizar que cada usuario solo pueda acceder a las funcionalidades que le corresponden segun su rol en la organizacion. --- ## Objetivo de Negocio Implementar un sistema de permisos que: - Garantice segregacion de funciones - Permita administracion granular de accesos - Soporte multiples niveles de roles - Sea auditable y trazable - Se adapte a diferentes estructuras organizacionales --- ## Stakeholders | Rol | Nombre/Equipo | Responsabilidad | |-----|---------------|-----------------| | Product Owner | Equipo Producto | Definicion de roles base | | Tech Lead | Equipo Backend | Implementacion de guards | | Seguridad | Equipo Infra | Validacion de modelo RBAC | | Administradores | Clientes | Feedback de usabilidad | --- ## Historias de Usuario | ID | Historia | Prioridad | SP | Estado | |----|----------|-----------|-----|--------| | US-MGN003-001 | Como superadmin, quiero crear roles personalizados para adaptar permisos a mi organizacion | P0 | 5 | Ready | | US-MGN003-002 | Como admin, quiero asignar roles a usuarios para definir sus permisos | P0 | 3 | Ready | | US-MGN003-003 | Como superadmin, quiero definir permisos granulares por recurso/accion para control fino | P0 | 8 | Ready | | US-MGN003-004 | Como admin, quiero ver que permisos tiene un usuario para verificar accesos | P0 | 3 | Ready | | US-MGN003-005 | Como sistema, quiero validar permisos en cada request para proteger recursos | P0 | 5 | Ready | | US-MGN003-006 | Como admin, quiero duplicar roles existentes para crear variaciones rapidamente | P2 | 2 | Backlog | **Total Story Points:** 26 SP --- ## Criterios de Aceptacion de la Epica **Funcionales:** - [ ] CRUD de roles con nombre, descripcion y jerarquia - [ ] Catalogo de permisos por modulo/recurso/accion - [ ] Asignacion multiple de roles a usuarios - [ ] Roles predefinidos: SuperAdmin, Admin, User, Viewer - [ ] Herencia de permisos entre roles - [ ] Visualizacion de permisos efectivos por usuario **No Funcionales:** - [ ] Performance: Validacion de permisos < 5ms (con cache) - [ ] Seguridad: Principio de minimo privilegio - [ ] Usabilidad: Interfaz intuitiva para asignar permisos **Tecnicos:** - [ ] Cobertura de tests > 85% - [ ] Guards implementados en backend - [ ] Directivas de permisos en frontend - [ ] Cache de permisos por usuario --- ## Dependencias **Esta epica depende de:** | Epica/Modulo | Estado | Bloqueante | |--------------|--------|------------| | EPIC-MGN-001 Auth | Ready | Si | | EPIC-MGN-002 Users | Ready | Si | **Esta epica bloquea:** | Epica/Modulo | Razon | |--------------|-------| | EPIC-MGN-004 Tenants | Roles por tenant | | Todos los modulos | Proteccion de endpoints | --- ## Desglose Tecnico **Database:** - [ ] Schema: `core_auth` (extension) - [ ] Tablas: 4 (roles, permissions, role_permissions, user_roles) - [ ] Funciones: 2 (obtener_permisos_usuario, verificar_permiso) - [ ] RLS Policies: Si (roles por tenant) **Backend:** - [ ] Modulo: `roles` - [ ] Entities: 4 (Role, Permission, RolePermission, UserRole) - [ ] Endpoints: 10 (CRUD roles + permisos + asignacion) - [ ] Guards: PermissionsGuard, RolesGuard - [ ] Decorators: @RequirePermission, @RequireRole - [ ] Tests: 30+ **Frontend:** - [ ] Paginas: 3 (RolesList, RoleDetail, UserPermissions) - [ ] Componentes: 8 (RoleForm, PermissionTree, RoleAssigner, etc.) - [ ] Stores: 1 (rolesStore) - [ ] Directivas: v-permission, v-role --- ## Modelo de Permisos ``` Estructura de Permiso: {modulo}:{recurso}:{accion} Ejemplos: - users:user:read - users:user:create - users:user:update - users:user:delete - roles:role:manage - tenants:tenant:admin ``` **Roles Predefinidos:** | Rol | Descripcion | Permisos | |-----|-------------|----------| | SuperAdmin | Acceso total al sistema | *.* | | TenantAdmin | Admin de un tenant | {tenant}:*.* | | Manager | Gestion operativa | Lectura + escritura modulos operativos | | User | Usuario estandar | Lectura + escritura limitada | | Viewer | Solo lectura | *:*:read | --- ## Riesgos | Riesgo | Probabilidad | Impacto | Mitigacion | |--------|--------------|---------|------------| | Complejidad del modelo | Media | Alto | POC previo, documentacion clara | | Performance sin cache | Alta | Alto | Redis cache de permisos | | Escalabilidad de permisos | Media | Medio | Wildcards, herencia | --- ## Definition of Ready (DoR) - [x] Historias de usuario definidas - [x] Criterios de aceptacion claros - [x] Dependencias identificadas - [x] Estimacion completada - [x] Modelo de permisos aprobado - [x] Sin bloqueadores activos ## Definition of Done (DoD) - [ ] Codigo implementado y revisado - [ ] Tests pasando (unit, integration, e2e) - [ ] Guards funcionando en todos los endpoints - [ ] Cache implementado - [ ] Documentacion actualizada - [ ] Demo realizada - [ ] Product Owner aprobo --- ## Documentacion Relacionada - Requerimientos: `docs/03-requerimientos/RF-rbac/` - Especificaciones: `docs/04-modelado/especificaciones-tecnicas/ET-rbac-*.md` - User Stories: `docs/05-user-stories/MGN-003/` - ADR: `docs/97-adr/ADR-006-rbac-sistema-permisos.md` --- ## Historial | Fecha | Cambio | Autor | |-------|--------|-------| | 2025-12-05 | Creacion de epica | Requirements-Analyst | --- **Creada por:** Requirements-Analyst **Fecha:** 2025-12-05 **Ultima actualizacion:** 2025-12-05