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 sqlalchemy.ext.asyncio import AsyncSession
from config.database import get_db from config.database import get_db
from services.role_service import RoleService 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 fastapi.security import OAuth2PasswordBearer
from typing import List from typing import List
router = APIRouter() router = APIRouter()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token") oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/v1/auth/token")
@router.post("/", status_code=201) @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) return await RoleService.delete_role(role_id, db, token)
@router.get("/permissions", response_model=List[PermissionResponse]) @router.get("/roles/permissions", response_model=List[Permission])
async def get_all_permissions(): async def get_all_permissions(db: AsyncSession = Depends(get_db)):
""" """
Récupérer toutes les permissions disponibles. 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: class Config:
from_attributes = True from_attributes = True
class Permission(BaseModel):
id: int
name: str
class Role(BaseModel): class Role(BaseModel):
id: int id: int
name: str name: str

View File

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