fix: stabilize rule config and cross-review backend
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
|
||||
from fastapi_common.fastapi_common_logger import logger
|
||||
from fastapi_common.fastapi_common_sqlalchemy.database import GetAsyncSession
|
||||
import time
|
||||
|
||||
from fastapi_modules.fastapi_leaudit.services.permissionService import IPermissionService
|
||||
|
||||
@@ -16,6 +17,9 @@ from fastapi_modules.fastapi_leaudit.services.permissionService import IPermissi
|
||||
class PermissionServiceImpl(IPermissionService):
|
||||
"""权限检查服务实现。"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._permission_cache: dict[int, tuple[float, tuple[set[str], set[str]]]] = {}
|
||||
|
||||
async def CheckPermission(self, UserId: int, PermissionKey: str) -> bool:
|
||||
"""检查用户是否拥有指定权限。
|
||||
|
||||
@@ -74,6 +78,11 @@ class PermissionServiceImpl(IPermissionService):
|
||||
|
||||
async def _getUserPermissions(self, UserId: int) -> tuple[set[str], set[str]]:
|
||||
"""从数据库查询用户的 GRANT 和 DENY 权限集合。"""
|
||||
cached = self._permission_cache.get(UserId)
|
||||
now = time.monotonic()
|
||||
if cached and now - cached[0] <= 60:
|
||||
return cached[1]
|
||||
|
||||
grants: set[str] = set()
|
||||
denies: set[str] = set()
|
||||
|
||||
@@ -107,6 +116,7 @@ class PermissionServiceImpl(IPermissionService):
|
||||
denies.add(permKey)
|
||||
|
||||
logger.debug(f"用户权限: user={UserId}, grants={len(grants)}, denies={len(denies)}")
|
||||
self._permission_cache[UserId] = (now, (grants, denies))
|
||||
return grants, denies
|
||||
|
||||
@staticmethod
|
||||
|
||||
Reference in New Issue
Block a user