feat(api): add query role by id API
This commit is contained in:
parent
4e9412e48b
commit
bda5660bb6
@ -107,6 +107,15 @@ class RoleHandler:
|
|||||||
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 query_roles_by_id(self, role_id: PydanticObjectId) -> Optional[RoleDoc]:
|
||||||
|
"""Query a role by its ID"""
|
||||||
|
if not role_id:
|
||||||
|
raise RequestValidationError("role_id is required.")
|
||||||
|
doc = await RoleDoc.get(role_id)
|
||||||
|
if not doc:
|
||||||
|
raise RequestValidationError("Role not found.")
|
||||||
|
return doc
|
||||||
|
|
||||||
async def assign_permissions_to_role(self, role_id: PydanticObjectId, permission_ids: List[str]) -> Optional[RoleDoc]:
|
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"""
|
"""Assign permissions to a role by updating the permission_ids field"""
|
||||||
if not role_id or not permission_ids:
|
if not role_id or not permission_ids:
|
||||||
|
|||||||
@ -39,6 +39,10 @@ class RoleService:
|
|||||||
"""Assign permissions to a role by updating the permission_ids field"""
|
"""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)
|
return await self.role_handler.assign_permissions_to_role(PydanticObjectId(role_id), permission_ids)
|
||||||
|
|
||||||
|
async def query_roles_by_id(self, role_id: str) -> RoleDoc:
|
||||||
|
"""Query a single role by ID"""
|
||||||
|
return await self.role_handler.query_roles_by_id(PydanticObjectId(role_id))
|
||||||
|
|
||||||
async def delete_role(self, role_id: str) -> None:
|
async def delete_role(self, role_id: str) -> None:
|
||||||
"""Delete a role document after checking if it is referenced by any user"""
|
"""Delete a role document after checking if it is referenced by any user"""
|
||||||
return await self.role_handler.delete_role(PydanticObjectId(role_id))
|
return await self.role_handler.delete_role(PydanticObjectId(role_id))
|
||||||
@ -2,6 +2,7 @@ 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 .query_role_by_id import router as query_role_by_id_router
|
||||||
from .assign_permissions import router as assign_permissions_router
|
from .assign_permissions import router as assign_permissions_router
|
||||||
from .delete_role import router as delete_role_router
|
from .delete_role import router as delete_role_router
|
||||||
|
|
||||||
@ -10,5 +11,6 @@ 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(query_role_by_id_router, prefix="/role", tags=["role"])
|
||||||
router.include_router(assign_permissions_router, prefix="/role", tags=["role"])
|
router.include_router(assign_permissions_router, prefix="/role", tags=["role"])
|
||||||
router.include_router(delete_role_router, prefix="/role", tags=["role"])
|
router.include_router(delete_role_router, prefix="/role", tags=["role"])
|
||||||
51
apps/authentication/webapi/routes/role/query_role_by_id.py
Normal file
51
apps/authentication/webapi/routes/role/query_role_by_id.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from fastapi import APIRouter, HTTPException
|
||||||
|
from pydantic import BaseModel
|
||||||
|
from typing import Optional, 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 QueryRoleByIdRequest(BaseModel):
|
||||||
|
role_id: str
|
||||||
|
|
||||||
|
class QueryRoleByIdResponse(BaseModel):
|
||||||
|
id: str
|
||||||
|
role_key: str
|
||||||
|
role_name: str
|
||||||
|
role_description: Optional[str] = None
|
||||||
|
permission_ids: List[str]
|
||||||
|
role_level: int
|
||||||
|
created_at: datetime
|
||||||
|
updated_at: datetime
|
||||||
|
|
||||||
|
|
||||||
|
@router.post(
|
||||||
|
"/query_by_id",
|
||||||
|
response_model=QueryRoleByIdResponse,
|
||||||
|
operation_id="query-role-by-id",
|
||||||
|
summary="Query Role by Id",
|
||||||
|
description="Query role by id."
|
||||||
|
)
|
||||||
|
async def query_roles_by_id(
|
||||||
|
req: QueryRoleByIdRequest,
|
||||||
|
) -> QueryRoleByIdResponse:
|
||||||
|
try:
|
||||||
|
result = await role_service.query_roles_by_id(req.role_id)
|
||||||
|
return QueryRoleByIdResponse(
|
||||||
|
id=str(result.id),
|
||||||
|
role_key=result.role_key,
|
||||||
|
role_name=result.role_name,
|
||||||
|
role_description=result.role_description,
|
||||||
|
permission_ids=result.permission_ids,
|
||||||
|
role_level=result.role_level,
|
||||||
|
created_at=result.created_at,
|
||||||
|
updated_at=result.updated_at
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=400, detail=str(e))
|
||||||
Loading…
Reference in New Issue
Block a user