corrections roles
parent
a7b1d5d1a8
commit
59df9bc409
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
Loading…
Reference in New Issue