feat(role_management): add assign permissions to role api
This commit is contained in:
parent
2382f0bece
commit
795c1262c6
@ -2,7 +2,7 @@ from typing import Optional, List, Tuple
|
|||||||
|
|
||||||
from fastapi.exceptions import RequestValidationError
|
from fastapi.exceptions import RequestValidationError
|
||||||
|
|
||||||
from backend.models.permission.models import RoleDoc
|
from backend.models.permission.models import RoleDoc, PermissionDoc
|
||||||
from beanie import PydanticObjectId
|
from beanie import PydanticObjectId
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
@ -71,3 +71,25 @@ class RoleHandler:
|
|||||||
total = await cursor.count()
|
total = await cursor.count()
|
||||||
docs = await cursor.skip(skip).limit(limit).to_list()
|
docs = await cursor.skip(skip).limit(limit).to_list()
|
||||||
return docs, total
|
return docs, total
|
||||||
|
|
||||||
|
async def assign_permissions_to_role(self, role_id: PydanticObjectId, permission_ids: List[str]) -> Optional[RoleDoc]:
|
||||||
|
"""Assign permissions to a role by updating the permission_ids field"""
|
||||||
|
if not role_id or not permission_ids:
|
||||||
|
raise RequestValidationError("role_id and permission_ids are required.")
|
||||||
|
doc = await RoleDoc.get(role_id)
|
||||||
|
if not doc:
|
||||||
|
raise RequestValidationError("Role not found.")
|
||||||
|
|
||||||
|
# Validate that all permission_ids exist in the permission collection
|
||||||
|
for permission_id in permission_ids:
|
||||||
|
permission_doc = await PermissionDoc.get(PydanticObjectId(permission_id))
|
||||||
|
if not permission_doc:
|
||||||
|
raise RequestValidationError(f"Permission with id {permission_id} not found.")
|
||||||
|
|
||||||
|
# Remove duplicates from permission_ids
|
||||||
|
unique_permission_ids = list(dict.fromkeys(permission_ids))
|
||||||
|
|
||||||
|
doc.permission_ids = unique_permission_ids
|
||||||
|
doc.updated_at = datetime.now()
|
||||||
|
await doc.save()
|
||||||
|
return doc
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
from typing import Optional, Dict, Any
|
from typing import Optional, Dict, Any, List
|
||||||
|
|
||||||
from fastapi.exceptions import RequestValidationError
|
from fastapi.exceptions import RequestValidationError
|
||||||
|
|
||||||
@ -33,4 +33,8 @@ class RoleService:
|
|||||||
"total": total,
|
"total": total,
|
||||||
"page": page,
|
"page": page,
|
||||||
"page_size": page_size
|
"page_size": page_size
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async def assign_permissions_to_role(self, role_id: str, permission_ids: List[str]) -> RoleDoc:
|
||||||
|
"""Assign permissions to a role by updating the permission_ids field"""
|
||||||
|
return await self.role_handler.assign_permissions_to_role(PydanticObjectId(role_id), permission_ids)
|
||||||
@ -2,9 +2,11 @@ from fastapi import APIRouter
|
|||||||
from .create_role import router as create_role_router
|
from .create_role import router as create_role_router
|
||||||
from .update_role import router as update_role_router
|
from .update_role import router as update_role_router
|
||||||
from .query_role import router as query_role_router
|
from .query_role import router as query_role_router
|
||||||
|
from .assign_permissions import router as assign_permissions_router
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
router.include_router(create_role_router, prefix="/role", tags=["role"])
|
router.include_router(create_role_router, prefix="/role", tags=["role"])
|
||||||
router.include_router(update_role_router, prefix="/role", tags=["role"])
|
router.include_router(update_role_router, prefix="/role", tags=["role"])
|
||||||
router.include_router(query_role_router, prefix="/role", tags=["role"])
|
router.include_router(query_role_router, prefix="/role", tags=["role"])
|
||||||
|
router.include_router(assign_permissions_router, prefix="/role", tags=["role"])
|
||||||
38
apps/authentication/webapi/routes/role/assign_permissions.py
Normal file
38
apps/authentication/webapi/routes/role/assign_permissions.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from fastapi import APIRouter
|
||||||
|
from pydantic import BaseModel
|
||||||
|
from typing import List
|
||||||
|
from backend.services.permission.role_service import RoleService
|
||||||
|
from common.token.token_manager import TokenManager
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
token_manager = TokenManager()
|
||||||
|
role_service = RoleService()
|
||||||
|
|
||||||
|
class AssignPermissionsRequest(BaseModel):
|
||||||
|
role_id: str
|
||||||
|
permission_ids: List[str]
|
||||||
|
|
||||||
|
class RoleResponse(BaseModel):
|
||||||
|
id: str
|
||||||
|
role_key: str
|
||||||
|
role_name: str
|
||||||
|
role_description: str
|
||||||
|
permission_ids: List[str]
|
||||||
|
role_level: int
|
||||||
|
created_at: datetime
|
||||||
|
updated_at: datetime
|
||||||
|
|
||||||
|
@router.post(
|
||||||
|
"/assign-permissions",
|
||||||
|
response_model=RoleResponse,
|
||||||
|
operation_id="assign-permissions-to-role",
|
||||||
|
summary="Assign Permissions to Role",
|
||||||
|
description="Assign permissions to a role by updating the permission_ids field."
|
||||||
|
)
|
||||||
|
async def assign_permissions_to_role(
|
||||||
|
req: AssignPermissionsRequest,
|
||||||
|
) -> RoleResponse:
|
||||||
|
doc = await role_service.assign_permissions_to_role(req.role_id, req.permission_ids)
|
||||||
|
return RoleResponse(**doc.dict())
|
||||||
Loading…
Reference in New Issue
Block a user