# /opt/docker/dev/service_finder/backend/app/core/rbac.py from fastapi import HTTPException, Depends, status from app.api.deps import get_current_user from app.models.identity import User class RBAC: def __init__(self, required_perm: str = None, min_rank: int = 0): self.required_perm = required_perm self.min_rank = min_rank async def __call__(self, current_user: User = Depends(get_current_user)): # 1. Szuperadmin (Rank 100) mindent visz if current_user.role == "SUPERADMIN": return True # 2. Rang ellenőrzés (Hierarchia) # Itt feltételezzük, hogy a role-okhoz rendelt rank-okat egy configból vesszük user_rank = self.get_role_rank(current_user.role) if user_rank < self.min_rank: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Ezen a hierarchia szinten ez a művelet nem engedélyezett." ) # 3. Egyedi képesség ellenőrzés (Capabilities) user_perms = current_user.custom_permissions.get("capabilities", []) if self.required_perm and self.required_perm not in user_perms: # Ha a sablonban sincs benne, akkor tiltás if not self.check_role_template(current_user.role, self.required_perm): raise HTTPException(status_code=403, detail="Nincs meg a specifikus jogosultságod.") return True def get_role_rank(self, role: str): ranks = {"COUNTRY_ADMIN": 80, "REGION_ADMIN": 60, "MODERATOR": 40, "SALES": 20, "USER": 10} return ranks.get(role, 0) def check_role_template(self, role: str, perm: str): # Ide jön majd az RBAC_MASTER_CONFIG JSON betöltése return False