feature/app-selector
This commit is contained in:
@@ -104,18 +104,45 @@ async def get_my_permissions(
|
||||
# Nota: bootstrap_super_admin ya hace commit e intenta no duplicar si el rol ya existe
|
||||
permission_service.bootstrap_super_admin(user_id, company_id)
|
||||
|
||||
# 4. Obtener permisos finales
|
||||
# 4. Sincronizar permisos de sistema desde claim de Keycloak (si viene en el token)
|
||||
# El claim 'allowed_systems' puede contener ["fixed_asset"], ["inventory"], o ambos.
|
||||
# Solo sincroniza si el claim está presente; si no, los permisos de sistema se asignan
|
||||
# manualmente desde el panel de administración.
|
||||
_VALID_SYSTEMS = frozenset(("fixed_asset", "inventory"))
|
||||
keycloak_systems = current_user.get("allowed_systems") or []
|
||||
if keycloak_systems:
|
||||
for sys_code in keycloak_systems:
|
||||
if sys_code in _VALID_SYSTEMS:
|
||||
try:
|
||||
permission_service.grant_direct_permission(
|
||||
user_id=user_id,
|
||||
company_id=company_id,
|
||||
permission_code=f"system.{sys_code}.access",
|
||||
assigned_by="keycloak_sync",
|
||||
)
|
||||
except ValueError:
|
||||
# El permiso de sistema aún no existe en BD (sync pendiente); se ignora.
|
||||
pass
|
||||
|
||||
# 5. Obtener permisos finales
|
||||
permissions = permission_service.get_user_permissions(user_id, company_id)
|
||||
|
||||
# 5. Obtener roles
|
||||
roles = permission_service.get_user_roles(user_id, company_id)
|
||||
role_names = [role.name for role in roles]
|
||||
|
||||
# 6. Derivar sistemas permitidos desde los permisos de sistema
|
||||
allowed_systems = [
|
||||
sys for sys in ("inventory", "fixed_asset")
|
||||
if f"system.{sys}.access" in permissions
|
||||
]
|
||||
|
||||
return UserPermissionsResponse(
|
||||
user_id=user_id,
|
||||
company_id=company_id,
|
||||
permissions=list(permissions),
|
||||
roles=role_names,
|
||||
allowed_systems=allowed_systems,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -60,6 +60,10 @@ class UserPermissionsResponse(BaseModel):
|
||||
roles: List[str] = Field(
|
||||
default_factory=list, description="Lista de nombres de roles del usuario"
|
||||
)
|
||||
allowed_systems: List[str] = Field(
|
||||
default_factory=list,
|
||||
description="Sistemas a los que el usuario tiene acceso: fixed_asset, inventory",
|
||||
)
|
||||
|
||||
|
||||
class UserCompanyRoleResponse(BaseModel):
|
||||
|
||||
@@ -200,6 +200,14 @@ permissions_csv = [
|
||||
("csv_upload.process", "Procesar Cargas Masivas CSV", "csv_upload", "process"),
|
||||
]
|
||||
|
||||
# ============================================================================
|
||||
# ACCESO A SISTEMAS (SCAII / SCAF)
|
||||
# ============================================================================
|
||||
permissions_system_access = [
|
||||
("system.inventory.access", "Acceso al sistema Inventario (SCAII)", "system", "access"),
|
||||
("system.fixed_asset.access", "Acceso al sistema Activo Fijo (SCAF)", "system", "access"),
|
||||
]
|
||||
|
||||
def register_core_permissions():
|
||||
"""Registra los permisos granulados de la aplicación según Sidebar."""
|
||||
registry.register_many(permissions_audit)
|
||||
@@ -222,6 +230,7 @@ def register_core_permissions():
|
||||
registry.register_many(permissions_settings)
|
||||
registry.register_many(permissions_help)
|
||||
registry.register_many(permissions_csv)
|
||||
registry.register_many(permissions_system_access)
|
||||
|
||||
# Ejecutar registro al importar este módulo
|
||||
register_core_permissions()
|
||||
|
||||
Reference in New Issue
Block a user