Cada persona tiene un rol y, encima, excepciones propias: permisos concedidos y quitados (user_permissions). Sus permisos efectivos son los del rol, más los concedidos, menos los quitados (gana el quitado).
- Cambiar el rol (
PUT /users/{id}/roles) deja a la persona con los permisos exactos del rol nuevo: sus excepciones se borran y el registro guarda cuáles eran. - Cambiar permisos (
PUT /users/{id}/permissions) recibe la lista que la persona debe tener; la API guarda la diferencia con el rol como excepciones.
Lo sensible (permisos de usuarios, roles o sistema) pide el código de la aplicación autenticadora de quien administra, aunque ya tenga la sesión abierta.
Paso a paso
- AdministraciónElige el rol nuevo o marca los permisos
En la ficha de la persona.
PermissionChecklistmuestra solo lo que puede conceder y marca los sensibles. - NavegadorEnvía el cambio sin código
useReauthintenta primero sin código; solo si la API lo pide, abre el diálogo. - API¿Puede administrar a esta persona?
Necesita el permiso de la acción, no puede ser él mismo y debe tener un nivel mayor. El Super admin administra a todos menos a sí mismo.
- API¿Rol por debajo y permisos que él tiene?
Nadie concede lo que no tiene, salvo la cima. Al Super admin no se le conceden ni se le quitan permisos sueltos: los tiene todos por su rol.
- API¿Toca algo sensible?
El rol anterior o el nuevo, o los permisos que cambian.
- API¿Llegó un código válido?
Sin código responde
REAUTHENTICATION_REQUIREDy el navegador abreAppCodeDialog. El código no se puede repetir. Cinco incorrectos en un minuto bloquean la reautenticación (423) y dejan el eventoReauthenticationLocked. Quien no tiene MFA no puede confirmar:REAUTHENTICATION_UNAVAILABLE. - NavegadorPide el código y reenvía
- Base de datosGuarda el rol o las excepciones
Con lock sobre los Super admin activos: si el cambio dejaría a Trazo sin ninguno, responde
LAST_SUPER_ADMIN. Registro enadmin_actionscon el antes y el después (y las excepciones borradas, si cambió el rol). - Persona afectadaSus pantallas se ajustan al instante y recibe un correo
Por
session.changeden su canal personal (ver "Cambio de rol o desactivación en vivo"). El correo dice qué cambió.
El paso 7 vuelve al 6 cuando falta el código: es la única vuelta del diagrama, con línea punteada.
Qué ve la persona en cada error
| Código | HTTP | Cuándo | Mensaje en pantalla |
|---|---|---|---|
USER_SELF_MANAGEMENT | 403 | Intenta cambiar su propio rol o permisos | Tu propio rol, tus permisos, tu estado y tu acceso los cambia otra persona que administre Trazo. |
USER_OUTRANKED | 403 | La persona tiene su mismo nivel o uno mayor | Esta persona tiene un rol de tu mismo nivel o superior, así que no puedes cambiar su cuenta. |
ROLE_NOT_ASSIGNABLE | 422 | El rol nuevo no está por debajo del suyo | No puedes dar ese rol: solo puedes asignar roles por debajo del tuyo. |
PERMISSION_NOT_GRANTABLE | 422 | Concede un permiso que él no tiene | Solo puedes conceder permisos que tú también tienes. Revisa los permisos marcados y vuelve a intentarlo. |
USER_ROOT_FULL_ACCESS | 409 | Permisos sueltos a un Super admin | El Super admin tiene todos los permisos por su rol, así que no se le conceden ni se le quitan permisos uno por uno. |
LAST_SUPER_ADMIN | 409 | El cambio dejaría sin Super admin activo | Trazo necesita al menos un Super admin activo. Antes de este cambio, da el rol de Super admin a otra persona. |
REAUTHENTICATION_REQUIRED | 422 | Falta el código | Para confirmar este cambio, escribe el código de tu aplicación de autenticación. |
REAUTHENTICATION_UNAVAILABLE | 422 | Quien administra no tiene MFA | Para hacer este cambio necesitas tener activa la verificación en dos pasos. Actívala desde Mi cuenta y vuelve a intentarlo. |
REAUTHENTICATION_LOCKED | 423 | Cinco códigos incorrectos en un minuto | Escribiste varios códigos incorrectos seguidos. Espera {wait} y vuelve a intentarlo. |
Dónde está en el código
ChangeUserRoleyChangeUserPermissions.UserAccessyRootGuard.AuthAccountSecurity: reautenticación con el código.UserPermissionsyPermissionSql: permisos efectivos.useReauth,AppCodeDialog,PermissionChecklistyUserDetailPage.- Explicación: Módulo Users.