Roles
En el apartado de middlewares se explicaba que estos intervienen en acciones que permiten interceptar y/o modificar el flujo de datos.
En esta entrada, nos enfocaremos en la validación de roles, utilizando la clase HasRoles
.
Disponible en el módulo app.common.middlewares.sessions
Nota
- Te recomendamos leer, el apartado de Inyección de Dependencias.
- Es necesario utilizar la dependencia (Depend) validate_auth_session, para que esta clase funcione en un route.
HasRoles
es una clase utilizada como Inyección de Dependencias, para realizar las siguientes operaciones:
Definición
-
chequea que al menos uno de los roles exista, en la lista de roles enviados por la vista.
-
si no se envía ningún rol, se asigna y se valida el rol de menor privilegio,
AuthRoles.ANONYMOUS_USER
. -
obtiene los datos a validar, del objeto
request.state
para más información, consulta la funciónvalidate_auth_session
enapp.common.middlewares.auth
. -
inyecta en el route, el rol del obtenido de la
sesión
, óNone
en caso de error.
Las dependencias no tienen que ser funciones; también pueden ser clases. Al declarar HasRoles como clase, FastAPI la instanciará y le inyectará los parámetros necesarios cuando se use.
la clase HasRoles buscará en el objeto request.state
si existe una llave llamada role
y verifica que al menos uno, de los roles de la lista enviada, exista, en esta llave.
Nota
- Te recomendamos leer, el módulo app.common.middlewares.auth
veamos un ejemplo:
agregamos la dependencia validate_auth_session:
utilizamos HasRoles en un route:
Recuerda
Recuerda utilizar la dependencia (Depend) validate_auth_session, para que esta clase funcione correctamente en un route, de lo contrario generará un error al validar el rol.