corrections roles

main
Anaz 2025-01-12 11:47:38 +04:00
parent a7b1d5d1a8
commit 59df9bc409
3 changed files with 23 additions and 14 deletions

View File

@ -2,12 +2,12 @@ from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from config.database import get_db
from services.role_service import RoleService
from models.schemas import Role, PermissionResponse
from models.schemas import Permission, Role, PermissionResponse
from fastapi.security import OAuth2PasswordBearer
from typing import List
router = APIRouter()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token")
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/v1/auth/token")
@router.post("/", status_code=201)
@ -50,9 +50,9 @@ async def delete_role(role_id: int, db: AsyncSession = Depends(get_db), token: s
return await RoleService.delete_role(role_id, db, token)
@router.get("/permissions", response_model=List[PermissionResponse])
async def get_all_permissions():
@router.get("/roles/permissions", response_model=List[Permission])
async def get_all_permissions(db: AsyncSession = Depends(get_db)):
"""
Récupérer toutes les permissions disponibles.
"""
return RoleService.get_all_permissions()
return await RoleService.get_all_permissions(db)

View File

@ -48,6 +48,10 @@ class UserResponse(BaseModel):
class Config:
from_attributes = True
class Permission(BaseModel):
id: int
name: str
class Role(BaseModel):
id: int
name: str

View File

@ -26,7 +26,8 @@ class RoleService:
.join(role_permissions_table, permissions_table.c.id == role_permissions_table.c.permission_id)
.where(role_permissions_table.c.role_id == role['id'])
)
permissions_result = await db.execute(permissions_query)
result = await db.execute(permissions_query)
permissions_result = result.mappings().all()
permissions = [p["name"] for p in permissions_result]
role_data = dict(role)
role_data["permissions"] = permissions
@ -58,7 +59,7 @@ class RoleService:
for permission in filtered_permissions:
permission_query = select(permissions_table).where(permissions_table.c.name == permission)
permission_result = await db.execute(permission_query)
permission_record = permission_result.fetchone()
permission_record = permission_result.mappings().fetchone()
if permission_record:
insert_query = insert(role_permissions_table).values(
@ -87,7 +88,7 @@ class RoleService:
for permission in data["permissions"]:
permission_query = select(permissions_table).where(permissions_table.c.name == permission)
permission_result = await db.execute(permission_query)
permission_record = permission_result.fetchone()
permission_record = permission_result.mappings().fetchone()
if not permission_record:
raise HTTPException(status_code=400, detail=f"Permission '{permission}' not found")
@ -167,11 +168,14 @@ class RoleService:
return user
@staticmethod
async def get_all_permissions():
async def get_all_permissions(db: AsyncSession):
"""
Récupère toutes les permissions définies dans les paramètres (settings).
"""
return settings.available_permissions
Récupère toutes les permissions en BDD.
"""
query = select(permissions_table)
result = await db.execute(query)
permissions_result = result.mappings().all()
return permissions_result
@staticmethod
async def get_role(role_id: int, db):
@ -180,7 +184,7 @@ class RoleService:
"""
query = select(roles_table).where(roles_table.c.id == role_id)
result = await db.execute(query)
role = result.fetchone()
role = result.mappings().fetchone()
if not role:
raise HTTPException(status_code=404, detail="Role not found")
@ -191,7 +195,8 @@ class RoleService:
.join(role_permissions_table, role_permissions_table.c.permission_id == permissions_table.c.id)
.where(role_permissions_table.c.role_id == role_id)
)
permissions_result = await db.execute(permissions_query)
result = await db.execute(permissions_query)
permissions_result = result.mappings().all()
permissions = [row["name"] for row in permissions_result]
return {"id": role["id"], "name": role["name"], "permissions": permissions}