permission.py 818 B

1234567891011121314151617181920212223242526
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import Request
  4. from common.exception.errors import ServerError
  5. from core.conf import settings
  6. class RequestPermission:
  7. """
  8. 请求权限,仅用于角色菜单RBAC
  9. Tip:
  10. 使用此请求权限时,需要将 `Depends(RequestPermission('xxx'))` 在 `DependsRBAC` 之前设置,
  11. 因为 fastapi 当前版本的接口依赖注入按正序执行,意味着 RBAC 标识会在验证前被设置
  12. """
  13. def __init__(self, value: str):
  14. self.value = value
  15. async def __call__(self, request: Request):
  16. if settings.PERMISSION_MODE == 'role-menu':
  17. if not isinstance(self.value, str):
  18. raise ServerError
  19. # 附加权限标识
  20. request.state.permission = self.value