[Autenticación] Los usuarios inicia sesión (valida sus credenciales) y obtiene permisos
Time | |
---|---|
Assign | Carlo Alfredo Pano FloresFrancisco Javier Huerta Silva Omar Alonso Del Río Peralta[email protected] |
Status | Completed |
Created by | Carlos Sanchez |
Last edited by | Carlos Sanchez |
Last edited time | |
Created time |
Requerimiento no funcional necesarios
Requerimiento funcional
- El usuario quiere iniciar de sesión que cuando ingrese el correo y la contraseña valide los datos.
Cuando el usuario ingresa un correo universitario y contraseña correctos entonces el sistema lista las "movilidades académicas de entrada".
Cuando el usuario ingresa un correo universitario y contraseña incorrectos entonces el sistema manda un mensaje de error “revise su correo y contraseña”.
- El usuario quiere terminar la sesión.
Cuando el usuario termina la sesión entonces el sistema borra los datos de autenticación.
- El usuario obtiene permisos.
Consideraciones
El sistema de autenticación debe ser implementado usando la API proporcionada por la UABC.
Pero, el sistema de autorización es interno.
No se necesita crear una interfaz gráfica para el módulo de usuarios por lo que deben crearse desde la base de datos los roles, los usuarios y las asociaciones entre ellos.
Para la capa de presentación lo prioritario es el diseño de la interfaz.
Para la capa de negocio lo prioritario es mejorar el diseño del software, verificar la interacción de la API y crear el mecanismo de roles. Debe documentarse los roles, quienes son los usuarios y la asociación entre ellos (preguntar a Judith).
Capa de datos
Seeder (Semilla)
Mecanismo para crear usuarios desde un archivo CSV usando la API.
Use el entorno de playwright
.
POST /users
Authorization: Bearer TOKEN
[
{
"user": "EMAIL",
"claims": ["1", "2"]
}
]
Permisos
Cada usuario tiene una combinación de los siguientes claims
:
login
income_academic_mobilities.create.*
income_academic_mobilities.edit.*
income_academic_mobilities.read.*
income_academic_mobilities.delete.*
outcome_academic_mobilities.create.*
outcome_academic_mobilities.edit.*
outcome_academic_mobilities.read.*
outcome_academic_mobilities.delete.*
income_exchange_student.create.*
income_exchange_student.edit.*
income_exchange_student.read.*
income_exchange_student.delete.*
outcome_exchange_student.create.*
outcome_exchange_student.edit.*
outcome_exchange_student.read.*
outcome_exchange_student.delete.*
agreements.create.*
agreements.edit.*
agreements.read.*
agreements.delete.*
users.create.*
users.edit.*
users.read.*
users.delete.*
De manera reductiva, se puede ver a un permiso como uno binario de escritura o lectura.
Roles
tres niveles de usuario por campus
coordinacion general: rectoria
de los departamento: miguel alvarez
de las unidades academicas: coord vinculación y sub dirección
las unidades academicas son las que llenan la información para que lleguen limpios a rectoría
- Administrador
- Coordinación general
- Vicerrectoría
- Unidad académica (los únicos usuarios junto con el administrador que pueden modificar -crear, editar o eliminar- la información)
- Coordinación
- Subdirección
Usuarios
User | Claims |
jluna | * |
Todos los miembros del equipo | * |
Aracely | * |
Los correos dependen por unidad académica.
El modelo utilizado es el siguiente:
erDiagram
User ||--|{ Claim : has
User {
string email
}
Claim {
string claim
}
Capa de interfaz dominio-datos
graph LR
APIHandler --> Service
Service --> Database
Database --> Service
Service --> APIHandler
Capa de dominio
graph TD
subgraph User
/sessions/:token
/login
/logout
/users
end
users tiene los mismos métodos HTTP.
Consideraciones
- Usamos el estándar JWT.
- RBAC.
Cuando el usuario quiere iniciar sesión entonces
sequenceDiagram
Cliente->>Web Service: POST /sessions/login {'email': '([A-Z0-9])[email protected]', 'password': ''}
Web Service-->>Cliente: HTTP 201 Created {'token': 'JWT'}
Cliente->>Web Service: GET /sessions/:token/permissions
Web Service-->>Cliente: HTTP 200 OK Role{'name': 'abc', 'permissions': [...]}
Cuando el usuario quiere terminar la sesión entonces
Con el protocolo JWT no es posible cerrar sesión.
Referencias
- expressjs.com tiene un ejemplo de esto: https://github.com/expressjs/express/blob/master/examples/auth/index.js
- Tutorial MERN: https://www.mongodb.com/languages/mern-stack-tutorial
- WebStorm. GitHub tiene un programa (https://education.github.com/pack/offers) que te da un año gratis en dicho IDE.
- React-admin - Autenticación: https://marmelab.com/react-admin/doc/2.9/Authentication.html
Capa de presentación web
Consideraciones
- Usar un proveedor de datos fake mientras implementamos la capa de datos.
- Tomar en cuenta que los usuarios tienen roles (¿cómo controlarán quien tiene que acceso?)
- ¿Un formulario para petición de crear un nuevo usuario (Google Forms)?]
Mockups
Referencias