mirror of
https://github.com/fastapi-practices/fastapi_best_architecture.git
synced 2025-08-17 22:21:35 +08:00

* Reconstruct RBAC authentication logic * fix typo * Migrate casbin sqla Adapter to redis * Delete casbin model conf file * Add permission dependencies * Add request permission depends on execution condition * Update openapi authorization method * Add request permission identity * Add request permission dependency description * Migrate casbin redis adapter to sqla * Update menu model and add function * Fix menu permission identification * Update user partial interface permissions * Update menu table SQL * Add role menu permission description to README * fix README typo * Simplify permission dependency injection * Fix menu authorization store * Fix interface permission dependency order * Update role menu permission flag * Update the background permission logic of the interface
27 lines
842 B
Python
27 lines
842 B
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
from fastapi import Request
|
||
|
||
from backend.app.common.exception.errors import ServerError
|
||
from backend.app.core.conf import settings
|
||
|
||
|
||
class RequestPermission:
|
||
"""
|
||
请求权限,仅用于角色菜单RBAC
|
||
|
||
Tip:
|
||
使用此请求权限时,需要将 `Depends(RequestPermission('xxx'))` 在 `DependsRBAC` 之前设置,
|
||
因为 fastapi 当前版本的接口依赖注入按正序执行,意味着 RBAC 标识会在验证前被设置
|
||
"""
|
||
|
||
def __init__(self, value: str):
|
||
self.value = value
|
||
|
||
async def __call__(self, request: Request):
|
||
if settings.PERMISSION_MODE == 'role-menu':
|
||
if not isinstance(self.value, str):
|
||
raise ServerError
|
||
# 附加权限标识
|
||
request.state.permission = self.value
|