Skip to main content

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 de UsuarioRol.
  • 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;
}
info

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 por UsuarioInicioSesionConsumidor (ver Eventos).
  • El UsuarioInterceptor participa en el guardado de usuarios (ver Interceptores).