加入了 GVSDSDK 模块,进行了 QModel 兼容层的尝试,生产环境可用

This commit is contained in:
2026-06-16 00:13:10 +08:00
parent 9d9cfa53a4
commit 63e0f4edfc
68 changed files with 10256 additions and 1143 deletions

View File

@@ -0,0 +1,54 @@
from gvsdsdk.auth.cookie import ELT_COOKIE_NAME
from gvsdsdk.models import UserRole, Role
from gvsdsdk.model_utils import UUIDObj
class ELTAuthMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
elt_token = request.COOKIES.get(ELT_COOKIE_NAME)
if elt_token:
request.elt_token = elt_token
response = self.get_response(request)
return response
class CurrentRoleMiddleware:
"""解析 CurrentRoleUUID Cookie设置 request.current_role 和 request.current_company_uuid
request.current_role : gvsdsdk.models.Role 实例(或 None
request.current_company_uuid : 通过 UserRole.CompanyUUID 获取当前角色所属公司UUID
"""
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
request.current_role = None
request.current_company_uuid = None
# 仅对已认证用户处理角色
if hasattr(request, 'user') and request.user and request.user.is_authenticated:
role_uuid_str = request.COOKIES.get('CurrentRoleUUID', '')
if role_uuid_str:
try:
role_uuid_bytes = UUIDObj(role_uuid_str).bytes
# gvsdsdk.UserRole 的 RoleUUID 是 UUIDField不能用 select_related
user_role = UserRole.objects.filter(
UserUUID=request.user.UserUUID,
RoleUUID=role_uuid_bytes
).first()
if user_role:
# 单独查询 Role 实例
role = Role.objects.filter(RoleUUID=role_uuid_bytes).first()
if role:
request.current_role = role
# 通过 UserRole.CompanyUUID 获取当前公司
if user_role.CompanyUUID:
request.current_company_uuid = user_role.CompanyUUID
except Exception:
pass
return self.get_response(request)