feat: implement pivot-currency model, rbac smart tokens & fix circular imports
This commit is contained in:
40
backend/app/core/rbac.py
Normal file
40
backend/app/core/rbac.py
Normal file
@@ -0,0 +1,40 @@
|
||||
# /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
|
||||
Reference in New Issue
Block a user