Files
Django/gvsdsdk/auth/middleware.py

55 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)