Seguridad y RBAC
La seguridad en Yastubo se basa en la protección de los datos sensibles de los migrantes y sus familias. Hemos implementado un sistema robusto de Control de Acceso Basado en Roles (RBAC) y una estructura de Multi-tenancy (Companys) para asegurar la privacidad de la información.
Core Benefits
Section titled “Core Benefits”- Aislamiento de Datos: Cada usuario opera dentro de uno o más “Companys”, garantizando que la información de un reseller no sea visible para otro.
- Granularidad de Permisos: Los endpoints de la API están protegidos por roles específicos que definen qué acciones puede realizar cada usuario.
- Autenticación Stateless: Utilizamos JWT (JSON Web Tokens) para una autenticación rápida y segura, permitiendo el escalamiento horizontal.
Deep Dive Técnico: Gestión de Roles y Permisos
Section titled “Deep Dive Técnico: Gestión de Roles y Permisos”El sistema utiliza un decorador require_role para inyectar lógica de autorización directamente en los endpoints de FastAPI.
Roles Predefinidos
Section titled “Roles Predefinidos”- SUPER_ADMIN: Acceso total a todos los módulos y configuraciones del sistema.
- ADMIN: Gestión de pólizas, beneficiarios y pagos dentro de su company.
- OPERATOR: Gestión operativa básica (ej. soporte a siniestros).
- RESELLER: Solo acceso a sus propios leads y pólizas emitidas.
Inyección de Dependencias para RBAC
Section titled “Inyección de Dependencias para RBAC”def require_role(*roles: str) -> Callable: def role_checker(user: User = Depends(get_current_user)): user_roles = [role.name for role in user.roles] # Verificamos si el usuario posee al menos uno de los roles requeridos if not any(role in user_roles for role in roles): raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="No tienes permisos suficientes para realizar esta acción" ) return user return role_checkerEste enfoque asegura que el código de negocio no tenga que preocuparse por la lógica de autorización, ya que es gestionada por la capa de dependencias de la API.
Multi-tenancy con Companys
Section titled “Multi-tenancy con Companys”El sistema permite que un usuario pertenezca a múltiples entornos de trabajo. Para gestionar esto, el backend espera un header X-Company-Id en las peticiones que requieren contexto de empresa.
Resolución de Company
Section titled “Resolución de Company”Si un usuario pertenece a un solo company, el sistema lo selecciona automáticamente. Si pertenece a varios, debe especificarlo en el header:
async def get_current_company_id( user: User = Depends(get_current_user), company_id: Optional[uuid.UUID] = Header(None, alias="X-Company-Id"),) -> uuid.UUID: # Lógica de validación de pertenencia al company...Esto previene accesos accidentales o malintencionados a datos de otros clientes u organizaciones.
Flujo de Autenticación y Autorización
Section titled “Flujo de Autenticación y Autorización”