RF-ROLE-002: Gestion de Permisos
Identificacion
| Campo |
Valor |
| ID |
RF-ROLE-002 |
| Modulo |
MGN-003 Roles/RBAC |
| Prioridad |
P0 - Critica |
| Estado |
Ready |
| Fecha |
2025-12-05 |
Descripcion
El sistema debe mantener un catalogo de permisos que definen las acciones granulares que los usuarios pueden realizar. Los permisos se agrupan por modulo y se asignan a roles. El sistema soporta permisos jerarquicos donde un permiso padre implica todos sus hijos.
Actores
| Actor |
Descripcion |
| Super Admin |
Puede ver todos los permisos del sistema |
| Admin |
Puede ver permisos disponibles para su tenant |
| Sistema |
Registra nuevos permisos al instalar modulos |
Precondiciones
- Usuario autenticado con permiso
permissions:read
- Permisos base del sistema inicializados
Catalogo de Permisos
Estructura de Permisos
Los permisos siguen el patron modulo:accion o modulo:recurso:accion:
users:read - Leer usuarios
users:create - Crear usuarios
users:update - Actualizar usuarios
users:delete - Eliminar usuarios
users:* - Todos los permisos de usuarios (wildcard)
inventory:products:read - Leer productos
inventory:products:create - Crear productos
inventory:* - Todo el modulo inventario
Permisos por Modulo
Modulo Auth (MGN-001)
| Permiso |
Descripcion |
| auth:sessions:read |
Ver sesiones activas |
| auth:sessions:revoke |
Revocar sesiones |
Modulo Users (MGN-002)
| Permiso |
Descripcion |
| users:read |
Listar y ver usuarios |
| users:create |
Crear usuarios |
| users:update |
Actualizar usuarios |
| users:delete |
Eliminar usuarios |
| users:activate |
Activar/desactivar usuarios |
| users:export |
Exportar lista de usuarios |
| users:import |
Importar usuarios |
Modulo Roles (MGN-003)
| Permiso |
Descripcion |
| roles:read |
Listar y ver roles |
| roles:create |
Crear roles |
| roles:update |
Actualizar roles |
| roles:delete |
Eliminar roles |
| roles:assign |
Asignar roles a usuarios |
| permissions:read |
Ver permisos disponibles |
Modulo Tenants (MGN-004)
| Permiso |
Descripcion |
| tenants:read |
Ver configuracion del tenant |
| tenants:update |
Actualizar configuracion |
| tenants:billing |
Gestionar facturacion |
Modulo Settings (MGN-006)
| Permiso |
Descripcion |
| settings:read |
Ver configuracion |
| settings:update |
Modificar configuracion |
Modulo Audit (MGN-007)
| Permiso |
Descripcion |
| audit:read |
Ver logs de auditoria |
| audit:export |
Exportar logs |
Modulo Reports (MGN-009)
| Permiso |
Descripcion |
| reports:read |
Ver reportes |
| reports:create |
Crear reportes personalizados |
| reports:export |
Exportar reportes |
| reports:schedule |
Programar reportes |
Modulo Financial (MGN-010)
| Permiso |
Descripcion |
| financial:accounts:read |
Ver cuentas contables |
| financial:accounts:manage |
Gestionar cuentas |
| financial:transactions:read |
Ver transacciones |
| financial:transactions:create |
Crear transacciones |
| financial:transactions:approve |
Aprobar transacciones |
| financial:reports:read |
Ver reportes financieros |
Modulo Inventory (MGN-011)
| Permiso |
Descripcion |
| inventory:products:read |
Ver productos |
| inventory:products:create |
Crear productos |
| inventory:products:update |
Actualizar productos |
| inventory:products:delete |
Eliminar productos |
| inventory:stock:read |
Ver stock |
| inventory:stock:adjust |
Ajustar stock |
| inventory:movements:read |
Ver movimientos |
| inventory:movements:create |
Crear movimientos |
Flujo Principal
Listar Permisos Disponibles
1. Admin accede a Configuracion > Roles > Nuevo/Editar
2. Sistema carga lista de permisos agrupados por modulo
3. Sistema muestra solo permisos habilitados para el tenant
4. Admin puede expandir/colapsar grupos
5. Admin puede buscar permisos por nombre
Ver Permisos de un Rol
1. Admin accede a detalle de un rol
2. Sistema muestra permisos agrupados por modulo
3. Sistema indica cuales son heredados vs directos
4. Sistema muestra descripcion de cada permiso
Reglas de Negocio
| ID |
Regla |
| RN-001 |
Permisos son inmutables por usuarios |
| RN-002 |
Permisos se registran por el sistema al instalar modulos |
| RN-003 |
Permiso wildcard (*) incluye todas las acciones del modulo |
| RN-004 |
Tenant solo ve permisos de modulos que tiene activos |
| RN-005 |
Codigo de permiso unico globalmente |
| RN-006 |
Permisos pueden estar activos o deprecados |
Jerarquia de Permisos
users:* (Wildcard - todos los permisos de users)
├── users:read
├── users:create
├── users:update
├── users:delete
├── users:activate
├── users:export
└── users:import
inventory:* (Wildcard - todo inventario)
├── inventory:products:* (Wildcard - productos)
│ ├── inventory:products:read
│ ├── inventory:products:create
│ ├── inventory:products:update
│ └── inventory:products:delete
├── inventory:stock:*
│ ├── inventory:stock:read
│ └── inventory:stock:adjust
└── inventory:movements:*
├── inventory:movements:read
└── inventory:movements:create
Criterios de Aceptacion
Escenario 1: Listar permisos disponibles
Given un admin autenticado
When solicita GET /api/v1/permissions
Then el sistema retorna permisos agrupados por modulo
And cada permiso incluye code, name, description
And solo incluye permisos de modulos activos en el tenant
Escenario 2: Buscar permisos
Given lista de 50 permisos
When el admin busca "users"
Then el sistema retorna solo permisos que contienen "users"
And mantiene agrupacion por modulo
Escenario 3: Validar wildcard
Given un rol con permiso "users:*"
When se verifica si tiene "users:delete"
Then el sistema confirma que SI tiene el permiso
And el permiso es heredado (no directo)
Escenario 4: Permisos por modulo deshabilitado
Given tenant sin modulo de inventario activo
When admin lista permisos disponibles
Then NO aparecen permisos de "inventory:*"
Notas Tecnicas
API Endpoints
// Listar todos los permisos
GET /api/v1/permissions
// Query params: ?search=users&module=users
// Response 200
{
"data": [
{
"module": "users",
"moduleName": "Gestion de Usuarios",
"permissions": [
{
"id": "perm-uuid",
"code": "users:read",
"name": "Leer usuarios",
"description": "Permite ver listado y detalle de usuarios",
"isDeprecated": false
},
// ...
]
},
{
"module": "roles",
"moduleName": "Roles y Permisos",
"permissions": [...]
}
]
}
// Listar permisos de un rol
GET /api/v1/roles/:roleId/permissions
// Response 200
{
"direct": ["users:read", "users:create"],
"inherited": ["users:update"], // via wildcard
"all": ["users:read", "users:create", "users:update"]
}
Modelo de Datos
interface Permission {
id: string;
code: string; // users:read
name: string; // Leer usuarios
description: string;
module: string; // users
parentCode?: string; // users:* (para jerarquia)
isDeprecated: boolean;
createdAt: Date;
}
Dependencias
| ID |
Descripcion |
| RF-ROLE-001 |
Roles que contienen permisos |
| MGN-004 |
Tenants para filtrar por modulos activos |
Estimacion
| Tarea |
Puntos |
| Backend: Seed de permisos |
2 |
| Backend: Endpoint listar |
2 |
| Backend: Logica wildcard |
3 |
| Backend: Tests |
2 |
| Frontend: PermissionsList component |
2 |
| Frontend: Tests |
1 |
| Total |
12 SP |
Historial
| Version |
Fecha |
Autor |
Cambios |
| 1.0 |
2025-12-05 |
System |
Creacion inicial |