Identidad
Visión general
Crono se apoya en ASP.NET Core Identity para gestionar las cuentas de usuario, los roles y la autenticación, adaptándolo a las reglas de negocio del sistema. Los usuarios se modelan con la entidad Usuario y sus permisos se agrupan mediante Rol y Funcion.
Usuarios, roles y funciones
Usuario(EntidadConAtributos, IEliminacionLogica, IUsuario, IOrganizacionRestringida, IAuditable): registro principal del usuario. Guarda credenciales (NombreUsuario,CorreoElectronico), datos de perfil, sesiones (UsuarioSesion), intentos de acceso (UsuarioIntentoAcceso) y su relación con organizaciones y sucursales (UsuarioOrganizacionSucursal).Rol(IReglasContenedor, IOrganizacionUnica): representa un rol, es decir, un grupo con un conjunto de permisos asignado. Los usuarios se vinculan a roles a través deUsuarioRol.Funcion: funciones aplicadas a nivel de sistema (derechos de acceso). No debe confundirse con los cargos del módulo de Recursos Humanos.
La entidad Usuario ofrece ayudantes como ObtenerRolIds() y ObtenerIdentificadorRoles() para trabajar con los roles asignados (opcionalmente solo los activos).
Obtener el usuario actual
El usuario en curso se obtiene desde ITrabajoContexto:
public class MiServicio
{
private readonly ITrabajoContexto _trabajoContexto;
public MiServicio(ITrabajoContexto trabajoContexto)
{
_trabajoContexto = trabajoContexto;
}
public Usuario ObtenerUsuarioActual()
=> _trabajoContexto.UsuarioActual;
}
ITrabajoContexto también expone SuplantadorActual: cuando un administrador suplanta a otro usuario, UsuarioActual es el usuario suplantado y SuplantadorActual es el administrador original.
Autenticación
CronoInicioSesionAdministrador extiende el SignInManager de ASP.NET Core para permitir el inicio de sesión por correo o nombre de usuario, generar las cookies de autenticación y aplicar el bloqueo por intentos fallidos. El resultado del inicio de sesión se representa con InicioSesionResultado.
var resultado = await _inicioSesionAdministrador.IniciarSesionAsync(
usuarioOCorreo, clave, recordar: false);
if (resultado.Exito)
{
// Usuario autenticado
}
El UserManager<Usuario> de ASP.NET Core queda disponible para tareas como el restablecimiento de clave, la confirmación de correo y la asignación de roles. La verificación en dos pasos (TOTP) se apoya en Rfc6238AutenticacionServicio.
Autenticación externa
Los módulos pueden registrar proveedores de inicio de sesión externos implementando IMetodoAutenticacionExterna. Cada proveedor registra su configuración y sus rutas de retorno en su clase Startup. El vínculo entre un usuario y una identidad de terceros se persiste en la entidad AutenticacionExterna, y el comportamiento global se controla con AutenticacionExternaConfiguraciones. Crono incluye soporte para proveedores como Google y Microsoft, y un módulo propio puede añadir otros de la misma forma.
Eventos e interceptores relacionados
- Al iniciar sesión se publica el evento
UsuarioInicioSesionEto, consumido porUsuarioInicioSesionConsumidor(ver Eventos). - El
UsuarioInterceptorparticipa en el guardado de usuarios (ver Interceptores).