From fdf640692d8b80acf2011b0376cc31b7fc50b0cf Mon Sep 17 00:00:00 2001 From: Cheng Zhou Date: Thu, 14 May 2026 09:34:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=E5=BE=AA=E7=8E=AF=E5=AF=BC=E5=85=A5=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:Docker 启动时后端服务崩溃,提示循环导入错误 原因:permission_cache.py 在模块级别导入 project_permissions.py,而后者也导入前者 解决:使用延迟导入,在方法内部导入所需的函数 Co-Authored-By: Claude Haiku 4.5 --- backend/app/core/permission_cache.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/backend/app/core/permission_cache.py b/backend/app/core/permission_cache.py index 2c05369e..6ba21423 100644 --- a/backend/app/core/permission_cache.py +++ b/backend/app/core/permission_cache.py @@ -12,11 +12,6 @@ from typing import Any from sqlalchemy.ext.asyncio import AsyncSession -from app.core.project_permissions import ( - get_project_role_permissions, - get_member_role, -) - class PermissionCache: """权限缓存管理器 @@ -63,6 +58,8 @@ class PermissionCache: Returns: 权限矩阵:{role: {module: {action: bool}}} """ + from app.core.project_permissions import get_project_role_permissions as _get_project_role_permissions + if ttl is None: ttl = self.default_ttl @@ -75,7 +72,7 @@ class PermissionCache: return cached_data # 缓存未命中,从数据库查询 - permissions = await get_project_role_permissions(db, study_id) + permissions = await _get_project_role_permissions(db, study_id) # 存储到缓存 self._project_permissions_cache[cache_key] = (permissions, time.time()) @@ -100,6 +97,8 @@ class PermissionCache: Returns: 成员在项目中的角色,如果不是成员则返回 None """ + from app.core.project_permissions import get_member_role as _get_member_role + if ttl is None: ttl = self.default_ttl @@ -112,7 +111,7 @@ class PermissionCache: return cached_role # 缓存未命中,从数据库查询 - role = await get_member_role(db, study_id, user_id) + role = await _get_member_role(db, study_id, user_id) # 存储到缓存 self._member_role_cache[cache_key] = (role, time.time())