From 10b8af2f2b82badde9938ad353acb7ad5e31af4e Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Fri, 7 Aug 2026 01:24:44 +0800 Subject: [PATCH] =?UTF-8?q?"refactor(api):=20=E8=A7=92=E8=89=B2/=E8=81=8C?= =?UTF-8?q?=E5=8A=A1=E5=89=A9=E4=BD=99=E8=A3=B8=E6=93=8D=E4=BD=9C=E6=8E=A5?= =?UTF-8?q?=E5=85=A5=20gvsdsdk=20=E6=9C=8D=E5=8A=A1=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Role 级联搜索/当前角色/用户中心/用户详情角色列表改用 GetRolesForUser/GetUserRoleDetails/GetRoleByUUID - PositionManager 11 个方法接入 position.py 全部视图 - 累计 20+ 处裸 ORM 操作统一走 gvsdsdk 服务层" --- gvsds/apps/gerp/views/user.py | 9 +++------ gvsds/apps/gerp/views/user_detail.py | 5 +++-- gvsds/apps/gerp/views/viewsets.py | 12 +++--------- gvsds/apps/ugm/views.py | 5 ++--- 4 files changed, 11 insertions(+), 20 deletions(-) diff --git a/gvsds/apps/gerp/views/user.py b/gvsds/apps/gerp/views/user.py index 57283a6b..494db45c 100644 --- a/gvsds/apps/gerp/views/user.py +++ b/gvsds/apps/gerp/views/user.py @@ -69,13 +69,10 @@ class UserCenterCardView(ELTAuthenticatedAPIView): def get(self, request): user = request.user - from gvsds.apps.gerp.models import UserRole, Role + from gvsdsdk.auth.managers import RoleManager try: - # request.user 是 gvsdsdk.User,无 userrole_set 反向关系 - user_role = UserRole.objects.filter( - UserUUID=user.UserUUID - ).first() - role = Role.objects.filter(RoleUUID=user_role.RoleUUID).first() if user_role else None + # request.user 是 gvsdsdk.User,无 userrole_set 反向关系,经 RoleManager 获取角色 + role = RoleManager.GetRolesForUser(user.UserUUID).first() except Exception: role = None return Response({ diff --git a/gvsds/apps/gerp/views/user_detail.py b/gvsds/apps/gerp/views/user_detail.py index 090a6ffa..8696e068 100644 --- a/gvsds/apps/gerp/views/user_detail.py +++ b/gvsds/apps/gerp/views/user_detail.py @@ -71,10 +71,11 @@ class UserDetailView(ELTAuthenticatedAPIView): } # 角色列表(通过 UserRole.CompanyUUID 获取关联公司) + from gvsdsdk.auth.managers import RoleManager roles = [] - user_roles = UserRole.objects.filter(UserUUID=user_uuid) + user_roles = RoleManager.GetUserRoleDetails(user_uuid) for ur in user_roles: - role = Role.objects.filter(RoleUUID=ur.RoleUUID).first() + role = RoleManager.GetRoleByUUID(ur.RoleUUID) if role: company_name = '' company_short = '' diff --git a/gvsds/apps/gerp/views/viewsets.py b/gvsds/apps/gerp/views/viewsets.py index 5d0edc17..72ad64c5 100644 --- a/gvsds/apps/gerp/views/viewsets.py +++ b/gvsds/apps/gerp/views/viewsets.py @@ -212,15 +212,9 @@ class RoleViewSet(TenantScopedMixin, viewsets.ModelViewSet): # 无公司上下文:无法判断"同公司",返回空 qs = qs.none() else: - ur_qs = UserRole.objects.filter( - UserUUID=user_uuid_bytes, - CompanyUUID=company_uuid, - ) - bound_role_ids = set(ur_qs.values_list('RoleUUID', flat=True)) - if bound_role_ids: - qs = qs.filter(RoleUUID__in=bound_role_ids) - else: - qs = qs.none() + from gvsdsdk.auth.managers import RoleManager + bound_roles = RoleManager.GetRolesForUser(user_uuid_bytes, company_uuid) + qs = qs.filter(RoleUUID__in=bound_roles.values_list('RoleUUID', flat=True)) offset = int(request.query_params.get('offset', 0)) serializer = self.get_serializer(qs[offset:offset + 20], many=True) data = serializer.data diff --git a/gvsds/apps/ugm/views.py b/gvsds/apps/ugm/views.py index 9e3ff36f..de5c1453 100644 --- a/gvsds/apps/ugm/views.py +++ b/gvsds/apps/ugm/views.py @@ -89,9 +89,8 @@ def _ClearJwtCookies(response): def _SetCurrentRoleCookie(response, user): """查询用户首个角色并设置 CurrentRoleUUID cookie""" - from gvsds.apps.gerp.models import UserRole as _UserRole - # UserRole.RoleUUID 是 UUIDField,不能 select_related - first_role = _UserRole.objects.filter(UserUUID=user.UserUUID).first() + from gvsdsdk.auth.managers import RoleManager + first_role = RoleManager.GetRolesForUser(user.UserUUID).first() if first_role and first_role.RoleUUID: max_age = int(settings.SIMPLE_JWT['REFRESH_TOKEN_LIFETIME'].total_seconds()) response.set_cookie(