50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from datetime import datetime
|
|
|
|
from fastapi import APIRouter
|
|
from pydantic import BaseModel
|
|
from typing import Optional, List
|
|
from backend.services.permission.permission_service import PermissionService
|
|
from common.token.token_manager import TokenManager
|
|
|
|
router = APIRouter()
|
|
token_manager = TokenManager()
|
|
permission_service = PermissionService()
|
|
|
|
class QueryPermissionRequest(BaseModel):
|
|
permission_key: Optional[str] = None
|
|
permission_name: Optional[str] = None
|
|
page: int = 1
|
|
page_size: int = 10
|
|
|
|
class PermissionResponse(BaseModel):
|
|
id: str
|
|
permission_key: str
|
|
permission_name: str
|
|
description: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class QueryPermissionResponse(BaseModel):
|
|
items: List[PermissionResponse]
|
|
total: int
|
|
page: int
|
|
page_size: int
|
|
|
|
@router.post(
|
|
"/query",
|
|
response_model=QueryPermissionResponse,
|
|
operation_id="query-permission",
|
|
summary="Query Permissions (paginated)",
|
|
description="Query permissions with pagination and fuzzy search. Only Admin role allowed."
|
|
)
|
|
async def query_permissions(
|
|
req: QueryPermissionRequest,
|
|
) -> QueryPermissionResponse:
|
|
result = await permission_service.query_permissions(req.permission_key, req.permission_name, req.page, req.page_size)
|
|
items = [PermissionResponse(**item) for item in result["items"]]
|
|
return QueryPermissionResponse(
|
|
items=items,
|
|
total=result["total"],
|
|
page=result["page"],
|
|
page_size=result["page_size"]
|
|
) |