erp-core/docs/01-fase-foundation/MGN-003-roles/requerimientos/RF-ROLE-001.md

11 KiB

RF-ROLE-001: CRUD de Roles

Identificacion

Campo Valor
ID RF-ROLE-001
Modulo MGN-003 Roles/RBAC
Prioridad P0 - Critica
Estado Ready
Fecha 2025-12-05

Descripcion

El sistema debe permitir a los administradores crear, listar, ver, actualizar y eliminar roles dentro de su tenant. Los roles son contenedores de permisos que se asignan a usuarios para controlar su acceso a funcionalidades del sistema.


Actores

Actor Descripcion
Super Admin Puede gestionar roles del sistema (built-in)
Admin Puede crear y gestionar roles personalizados del tenant

Precondiciones

  1. Usuario autenticado con permiso roles:create, roles:read, roles:update o roles:delete
  2. Tenant activo
  3. Para modificar: rol existente en el tenant

Flujo Principal

Crear Rol

1. Admin accede a Configuracion > Roles
2. Click en "Nuevo Rol"
3. Sistema muestra formulario:
   - Nombre del rol (unico en tenant)
   - Descripcion
   - Seleccion de permisos
4. Admin completa datos y selecciona permisos
5. Click en "Crear Rol"
6. Sistema valida unicidad del nombre
7. Sistema crea el rol con los permisos seleccionados
8. Sistema muestra mensaje de exito

Listar Roles

1. Admin accede a Configuracion > Roles
2. Sistema muestra tabla con:
   - Nombre del rol
   - Descripcion
   - Numero de permisos
   - Numero de usuarios asignados
   - Es rol del sistema (built-in)
   - Fecha de creacion
3. Admin puede filtrar por:
   - Nombre
   - Tipo (sistema/personalizado)
4. Admin puede ordenar por cualquier columna

Ver Detalle de Rol

1. Admin click en un rol de la lista
2. Sistema muestra:
   - Informacion basica del rol
   - Lista de permisos asignados (agrupados por modulo)
   - Lista de usuarios con este rol
   - Historial de cambios

Actualizar Rol

1. Admin click en "Editar" de un rol
2. Sistema muestra formulario con datos actuales
3. Admin modifica campos permitidos
4. Click en "Guardar Cambios"
5. Sistema valida cambios
6. Sistema actualiza el rol
7. Sistema registra en auditoria

Eliminar Rol

1. Admin click en "Eliminar" de un rol
2. Sistema verifica si hay usuarios asignados
3. Si hay usuarios:
   - Muestra advertencia con conteo
   - Opcion de reasignar a otro rol
4. Admin confirma eliminacion
5. Sistema aplica soft delete
6. Sistema desasigna usuarios (si se confirmo)

Flujos Alternativos

FA1: Nombre duplicado

1. En paso 6 del flujo crear
2. Sistema detecta nombre ya existe en tenant
3. Sistema muestra error "Ya existe un rol con este nombre"
4. Admin corrige el nombre
5. Continua desde paso 5

FA2: Intentar eliminar rol del sistema

1. Admin intenta eliminar rol built-in (admin, user, etc.)
2. Sistema muestra error "No se pueden eliminar roles del sistema"
3. Operacion cancelada

FA3: Intentar modificar rol del sistema

1. Admin intenta modificar rol built-in
2. Sistema permite solo agregar permisos adicionales
3. No permite quitar permisos base ni cambiar nombre

Reglas de Negocio

ID Regla
RN-001 Nombre de rol unico dentro del tenant
RN-002 Roles built-in no pueden eliminarse
RN-003 Roles built-in solo pueden extenderse (agregar permisos)
RN-004 Soft delete en lugar de hard delete
RN-005 Rol debe tener al menos un permiso
RN-006 Nombre del rol: 3-50 caracteres, alfanumerico con guiones
RN-007 Al eliminar rol, usuarios quedan sin ese rol
RN-008 Un tenant puede tener maximo 50 roles personalizados

Roles del Sistema (Built-in)

Codigo Nombre Descripcion Permisos Base
super_admin Super Administrador Acceso total al sistema Todos
admin Administrador Gestion del tenant Gestion usuarios, roles, config
manager Gerente Supervision operativa Lectura + reportes
user Usuario Acceso basico Solo lectura propia
guest Invitado Acceso minimo Solo dashboard

Criterios de Aceptacion

Escenario 1: Crear rol exitosamente

Given un admin autenticado con permiso "roles:create"
When crea un rol con nombre "Vendedor" y 5 permisos
Then el sistema crea el rol
  And el rol aparece en la lista
  And el rol tiene isBuiltIn = false
  And responde con status 201

Escenario 2: Listar roles con paginacion

Given 25 roles en el tenant (5 built-in + 20 custom)
When el admin solicita GET /api/v1/roles?page=1&limit=10
Then el sistema retorna 10 roles
  And incluye meta con total=25, pages=3
  And roles built-in aparecen primero

Escenario 3: No crear rol con nombre duplicado

Given un rol existente con nombre "Vendedor"
When el admin intenta crear otro rol "Vendedor"
Then el sistema responde con status 409
  And el mensaje es "Ya existe un rol con este nombre"

Escenario 4: No eliminar rol del sistema

Given el rol built-in "admin"
When el admin intenta eliminarlo
Then el sistema responde con status 400
  And el mensaje es "No se pueden eliminar roles del sistema"

Escenario 5: Soft delete de rol personalizado

Given un rol personalizado "Vendedor" con 3 usuarios
When el admin lo elimina con reasignacion a "user"
Then el rol tiene deleted_at establecido
  And los 3 usuarios ahora tienen rol "user"
  And el rol no aparece en listados

Mockup / Wireframe

+------------------------------------------------------------------+
|  [Logo]   Roles                           [+ Nuevo Rol]          |
+------------------------------------------------------------------+
| Buscar: [___________________] [Tipo: Todos ▼]                    |
+------------------------------------------------------------------+
| | Nombre          | Descripcion        | Permisos | Usuarios | ⚙ |
|---|-----------------|--------------------|-----------|---------|----|
| 🔒| Super Admin     | Acceso total       | 45       | 1       | 👁 |
| 🔒| Admin           | Gestion tenant     | 32       | 3       | 👁 |
| 🔒| Manager         | Supervision        | 18       | 5       | 👁 |
| 🔒| User            | Acceso basico      | 8        | 42      | 👁 |
|   | Vendedor        | Equipo de ventas   | 12       | 8       | ✏🗑|
|   | Contador        | Area contable      | 15       | 2       | ✏🗑|
|   | Almacenista     | Gestion inventario | 10       | 4       | ✏🗑|
+------------------------------------------------------------------+
| Mostrando 1-7 de 7                        [< Anterior] [Siguiente >]|
+------------------------------------------------------------------+

🔒 = Rol del sistema (built-in)

Modal: Crear/Editar Rol
┌──────────────────────────────────────────────────────────────────┐
│                        NUEVO ROL                                  │
├──────────────────────────────────────────────────────────────────┤
│  Nombre*          [_______________________________]              │
│  Descripcion      [_______________________________]              │
│                   [_______________________________]              │
│                                                                   │
│  PERMISOS                                        [Seleccionar todos]│
│  ┌────────────────────────────────────────────────────────────┐ │
│  │ ▼ Usuarios (4 permisos)                                     │ │
│  │   ☑ users:read    ☐ users:create                           │ │
│  │   ☐ users:update  ☐ users:delete                           │ │
│  │                                                              │ │
│  │ ▼ Roles (4 permisos)                                        │ │
│  │   ☑ roles:read    ☐ roles:create                           │ │
│  │   ☐ roles:update  ☐ roles:delete                           │ │
│  │                                                              │ │
│  │ ▼ Inventario (6 permisos)                                   │ │
│  │   ☑ inventory:read    ☑ inventory:create                   │ │
│  │   ☑ inventory:update  ☐ inventory:delete                   │ │
│  │   ☑ inventory:export  ☐ inventory:import                   │ │
│  └────────────────────────────────────────────────────────────┘ │
│                                                                   │
│  Permisos seleccionados: 7                                       │
│                                                                   │
│  [  Cancelar  ]                        [ Crear Rol ]             │
└──────────────────────────────────────────────────────────────────┘

Notas Tecnicas

API Endpoints

// Crear rol
POST /api/v1/roles
{
  "name": "Vendedor",
  "description": "Equipo de ventas",
  "permissionIds": ["perm-uuid-1", "perm-uuid-2"]
}

// Response 201
{
  "id": "role-uuid",
  "name": "Vendedor",
  "slug": "vendedor",
  "description": "Equipo de ventas",
  "isBuiltIn": false,
  "permissions": [...],
  "usersCount": 0,
  "createdAt": "2025-12-05T10:00:00Z"
}

// Listar roles
GET /api/v1/roles?page=1&limit=10&search=vend&type=custom

// Response 200
{
  "data": [...],
  "meta": { "total": 25, "page": 1, "limit": 10 }
}

// Ver detalle
GET /api/v1/roles/:id

// Actualizar rol
PATCH /api/v1/roles/:id
{
  "name": "Vendedor Senior",
  "permissionIds": ["perm-1", "perm-2", "perm-3"]
}

// Eliminar rol
DELETE /api/v1/roles/:id?reassignTo=other-role-id

Validaciones

Campo Validacion
name Required, 3-50 chars, unique en tenant
slug Auto-generado desde name
description Optional, max 500 chars
permissionIds Array min 1 elemento

Dependencias

ID Descripcion
RF-AUTH-001 Login para autenticacion
RF-ROLE-002 Permisos para asignar a roles
MGN-004 Tenants para aislamiento

Estimacion

Tarea Puntos
Backend: CRUD endpoints 5
Backend: Validaciones y reglas 3
Backend: Tests 2
Frontend: RolesListPage 3
Frontend: RoleForm modal 3
Frontend: PermissionSelector 2
Frontend: Tests 2
Total 20 SP

Historial

Version Fecha Autor Cambios
1.0 2025-12-05 System Creacion inicial