From b35e036b510d9b67ab590120a7f321ef2f1edbd6 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sat, 24 Oct 2026 23:09:58 +0800 Subject: [PATCH] =?UTF-8?q?refactor(ResolveRoleContext):=20=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=94=B9=E4=B8=BA=E8=BE=93=E5=87=BA=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8D=E3=80=81=E8=A7=92=E8=89=B2=E5=90=8D=E4=B8=8E=E7=A7=9F?= =?UTF-8?q?=E6=88=B7-=E5=85=AC=E5=8F=B8=E5=90=8D=EF=BC=8C=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=20UUID=20=E5=99=AA=E5=A3=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auth/middleware.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/auth/middleware.py b/auth/middleware.py index 802bdbc..1272a23 100644 --- a/auth/middleware.py +++ b/auth/middleware.py @@ -1,11 +1,28 @@ import logging +from functools import lru_cache from django.core.exceptions import ObjectDoesNotExist -from gvsdsdk.models import UserRole, Role +from gvsdsdk.models import UserRole, Role, Tenant, Company from gvsdsdk.model_utils import UUIDObj logger = logging.getLogger(__name__) +@lru_cache(maxsize=1024) +def _TenantName(TenantUuid: str) -> str: + """租户 UUID → 租户名(日志展示用,带缓存避免每请求查库)""" + return Tenant.objects.filter( + TenantUUID=UUIDObj(TenantUuid).bytes + ).values_list('TenantName', flat=True).first() or '' + + +@lru_cache(maxsize=1024) +def _CompanyName(CompanyUuid: str) -> str: + """公司 UUID → 公司名(日志展示用,带缓存避免每请求查库)""" + return Company.objects.filter( + CompanyUUID=UUIDObj(CompanyUuid).bytes + ).values_list('CompanyName', flat=True).first() or '' + + def ResolveRoleContext(request, user=None): """解析当前角色上下文,填充 request.current_role / current_company_uuid / current_tenant_uuid @@ -59,11 +76,14 @@ def ResolveRoleContext(request, user=None): # UserRole.CompanyUUID 是 UUIDField,直接赋值 if user_role.CompanyUUID: request.current_company_uuid = user_role.CompanyUUID - logger.info('[ResolveRoleContext] cookie=%s, role=%s, tenant=%s, company=%s', - role_uuid_str[:36], - getattr(role, 'RoleName', None) if role else None, - request.current_tenant_uuid, - request.current_company_uuid) + # 日志只输出可读信息:用户名 / 角色名 / 租户-公司名(避免一串 UUID) + if logger.isEnabledFor(logging.INFO): + TenantLabel = _TenantName(UUIDObj(request.current_tenant_uuid).str) if request.current_tenant_uuid else '' + CompanyLabel = _CompanyName(UUIDObj(request.current_company_uuid).str) if request.current_company_uuid else '' + logger.info('[ResolveRoleContext] 用户=%s, 角色=%s, company=%s', + getattr(user, 'UserName', None), + getattr(role, 'RoleName', None) if role else None, + f'{TenantLabel}-{CompanyLabel}') except (ValueError, KeyError, ObjectDoesNotExist) as e: logger.warning('[ResolveRoleContext] cookie=%s 解析失败: %s', role_uuid_str[:36], e) except Exception: