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: