46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
from datetime import datetime
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from pydantic import BaseModel
|
|
from typing import Optional
|
|
|
|
from backend.models.permission.constants import DefaultPermissionEnum
|
|
from backend.services.permission.permission_service import PermissionService
|
|
from common.token.token_manager import TokenManager
|
|
from common.utils.jwt_token import has_all_permissions
|
|
|
|
router = APIRouter()
|
|
token_manager = TokenManager()
|
|
permission_service = PermissionService()
|
|
|
|
|
|
class CreatePermissionRequest(BaseModel):
|
|
permission_key: str
|
|
permission_name: str
|
|
description: Optional[str] = None
|
|
|
|
|
|
class PermissionResponse(BaseModel):
|
|
id: str
|
|
permission_key: str
|
|
permission_name: str
|
|
description: Optional[str] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
@router.post(
|
|
"/create",
|
|
response_model=PermissionResponse,
|
|
operation_id="create-permission",
|
|
summary="Create Permission",
|
|
description="Create a new permission."
|
|
)
|
|
async def create_permission(
|
|
req: CreatePermissionRequest,
|
|
_: bool = Depends(has_all_permissions([DefaultPermissionEnum.CHANGE_PERMISSIONS.value.permission_key]))
|
|
) -> PermissionResponse:
|
|
doc = await permission_service.create_permission(req.permission_key, req.permission_name, req.description)
|
|
|
|
return PermissionResponse(**doc.dict())
|