Skip to content

Commit fd9a106

Browse files
committed
refactor: streamline application authorization logic and remove unused classes
1 parent 4a17152 commit fd9a106

4 files changed

Lines changed: 2 additions & 163 deletions

File tree

apps/chat/serializers/portal.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class PortalApplicationAuthMixin:
3030
def get_authorized_application_queryset(user_id):
3131
public_apps = ApplicationAccessToken.objects.filter(application_id=OuterRef("id"), authentication=False)
3232
if not ChatUser.objects.filter(id=user_id).exists():
33-
return Application.objects.filter(Exists(public_apps))
33+
return Application.objects.filter(is_publish=True).filter(Exists(public_apps))
3434
authed_token_exists = ApplicationAccessToken.objects.filter(application_id=OuterRef("id"), authentication=True)
3535
direct_auth = ResourceChatUserAuthorize.objects.filter(
3636
resource_id=OuterRef("id"), resource_type=ResourceType.APPLICATION.value, is_auth=True, user_id=user_id
@@ -42,7 +42,7 @@ def get_authorized_application_queryset(user_id):
4242
is_auth=True,
4343
user_group_id__in=user_groups,
4444
)
45-
return Application.objects.filter(
45+
return Application.objects.filter(is_publish=True).filter(
4646
Exists(public_apps) | (Exists(authed_token_exists) & (Exists(direct_auth) | Exists(group_auth)))
4747
)
4848

apps/portal/serializers/portal.py

Lines changed: 0 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,12 @@
1111
import uuid_utils.compat as uuid
1212
from django.core import signing
1313
from django.core.cache import cache
14-
from django.db.models import Exists, OuterRef
1514
from django.utils.translation import gettext_lazy as _
1615
from rest_framework import serializers
1716

18-
from application.models import Application, Chat
19-
from application.models.application_access_token import ApplicationAccessToken
2017
from common.auth.common import FileToken
2118
from common.constants.cache_version import Cache_Version
2219
from common.database_model_manage.database_model_manage import DatabaseModelManage
23-
from common.db.search import page_search
2420
from common.exception.app_exception import AppApiException
2521
from common.log.log import record_log
2622
from common.utils.common import password_verify, needs_password_upgrade, password_encrypt
@@ -30,10 +26,6 @@
3026
from portal.models import Portal
3127
from system_manage.models.chat_user import (
3228
ChatUser,
33-
ResourceChatUserAuthorize,
34-
ResourceChatUserGroupAuthorize,
35-
ResourceType,
36-
UserGroupRelation,
3729
)
3830
from users.serializers.login import LoginRequest
3931

@@ -116,110 +108,6 @@ def edit(self, instance, with_valid=True):
116108
return PortalSerializer.Model(portal).data
117109

118110

119-
class PortalApplicationAuthMixin:
120-
"""门户应用授权过滤公共逻辑"""
121-
122-
@staticmethod
123-
def get_authorized_application_queryset(user_id):
124-
public_apps = ApplicationAccessToken.objects.filter(application_id=OuterRef("id"), authentication=False)
125-
if not ChatUser.objects.filter(id=user_id).exists():
126-
return Application.objects.filter(Exists(public_apps))
127-
authed_token_exists = ApplicationAccessToken.objects.filter(application_id=OuterRef("id"), authentication=True)
128-
direct_auth = ResourceChatUserAuthorize.objects.filter(
129-
resource_id=OuterRef("id"), resource_type=ResourceType.APPLICATION.value, is_auth=True, user_id=user_id
130-
)
131-
user_groups = UserGroupRelation.objects.filter(user_id=user_id).values_list("group_id", flat=True)
132-
group_auth = ResourceChatUserGroupAuthorize.objects.filter(
133-
resource_id=OuterRef("id"),
134-
resource_type=ResourceType.APPLICATION.value,
135-
is_auth=True,
136-
user_group_id__in=user_groups,
137-
)
138-
return Application.objects.filter(
139-
Exists(public_apps) | (Exists(authed_token_exists) & (Exists(direct_auth) | Exists(group_auth)))
140-
)
141-
142-
143-
class ApplicationResponseSerializer(serializers.Serializer):
144-
id = serializers.CharField(required=True)
145-
name = serializers.CharField(required=True)
146-
desc = serializers.CharField(required=True)
147-
icon = serializers.CharField(required=True)
148-
type = serializers.CharField(required=True)
149-
dialogue_number = serializers.IntegerField(required=True)
150-
prologue = serializers.CharField(required=True)
151-
is_publish = serializers.BooleanField(required=True)
152-
153-
154-
class PortalApplicationSerializer(serializers.Serializer):
155-
class Query(PortalApplicationAuthMixin, serializers.Serializer):
156-
name = serializers.CharField(
157-
required=False, allow_blank=True, label=_("Application Name"), help_text=_("Application name")
158-
)
159-
160-
def get_query_set(self):
161-
queryset = Application.objects.filter(is_publish=True)
162-
name = self.data.get("name")
163-
if name:
164-
queryset = queryset.filter(name__icontains=name)
165-
return queryset.order_by("-create_time")
166-
167-
def page(self, current_page, page_size, user_id, with_valid=True):
168-
if with_valid:
169-
self.is_valid(raise_exception=True)
170-
queryset = self.get_query_set()
171-
queryset = queryset.filter(id__in=self.get_authorized_application_queryset(user_id).values("id"))
172-
return page_search(
173-
current_page,
174-
page_size,
175-
queryset,
176-
post_records_handler=lambda app: ApplicationResponseSerializer(app).data,
177-
)
178-
179-
180-
class PortalHistoricalConversationResponseSerializer(serializers.Serializer):
181-
id = serializers.CharField(required=True)
182-
abstract = serializers.CharField(required=True)
183-
create_time = serializers.CharField(required=True)
184-
update_time = serializers.CharField(required=True)
185-
application = serializers.SerializerMethodField()
186-
187-
def get_application(self, chat):
188-
return {
189-
"id": str(chat.application_id),
190-
"name": chat.application.name,
191-
"icon": chat.application.icon,
192-
}
193-
194-
195-
class PortalHistoricalConversationSerializer(serializers.Serializer):
196-
class Query(PortalApplicationAuthMixin, serializers.Serializer):
197-
name = serializers.CharField(
198-
required=False, allow_blank=True, label=_("Application Name"), help_text=_("Application name")
199-
)
200-
201-
def get_query_set(self, user_id):
202-
queryset = Chat.objects.filter(
203-
chat_user_id=user_id,
204-
is_deleted=False,
205-
application_id__in=self.get_authorized_application_queryset(user_id).values("id"),
206-
)
207-
name = self.data.get("name")
208-
if name:
209-
queryset = queryset.filter(application__name__icontains=name)
210-
return queryset.select_related("application").order_by("-update_time", "id")
211-
212-
def page(self, current_page, page_size, user_id, with_valid=True):
213-
if with_valid:
214-
self.is_valid(raise_exception=True)
215-
return page_search(
216-
current_page,
217-
page_size,
218-
self.get_query_set(user_id),
219-
post_records_handler=lambda chat: PortalHistoricalConversationResponseSerializer(chat).data,
220-
)
221-
222-
223111
class PortalLoginSerializer(serializers.Serializer):
224112
@staticmethod
225113
def login(instance):

apps/portal/urls.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,4 @@
99
path("portal/info", views.PortalInfoView.as_view()),
1010
path("portal/login", views.PortalLoginView.as_view()),
1111
path("portal/logout", views.PortalLogoutView.as_view()),
12-
path("portal/application/<int:current_page>/<int:page_size>", views.PortalApplicationView.as_view()),
13-
path(
14-
"portal/historical_conversation/<int:current_page>/<int:page_size>",
15-
views.PortalHistoricalConversationView.as_view(),
16-
),
1712
]

apps/portal/views/portal.py

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,11 @@
2020
from common.auth.constants.role_constants import RoleConstants
2121
from common.constants.cache_version import Cache_Version
2222
from common.log.log import log
23-
from common.utils.common import query_params_to_single_dict
2423
from django.core.cache import cache
2524
from portal.api.portal import PortalAPI
2625
from portal.serializers.portal import (
2726
PortalSerializer,
28-
PortalApplicationSerializer,
2927
PortalLoginSerializer,
30-
PortalHistoricalConversationSerializer,
3128
)
3229

3330

@@ -62,47 +59,6 @@ def put(self, request: Request):
6259
return result.success(PortalSerializer().edit(request.data))
6360

6461

65-
class PortalApplicationView(APIView):
66-
authentication_classes = [TokenAuth]
67-
68-
@extend_schema(
69-
methods=["GET"],
70-
description=_("Get published application list by page"),
71-
summary=_("Get published application list by page"),
72-
operation_id=_("Get published application list by page"),
73-
parameters=PortalAPI.Application.get_parameters(),
74-
responses=PortalAPI.Application.get_response(),
75-
tags=[_("Portal")],
76-
)
77-
@has_permissions(PermissionConstants.PORTAL_READ, RoleConstants.ADMIN)
78-
def get(self, request: Request, current_page: int, page_size: int):
79-
return result.success(
80-
PortalApplicationSerializer.Query(data={**query_params_to_single_dict(request.query_params)}).page(
81-
current_page, page_size, str(request.user.id)
82-
)
83-
)
84-
85-
86-
class PortalHistoricalConversationView(APIView):
87-
authentication_classes = [TokenAuth]
88-
89-
@extend_schema(
90-
methods=["GET"],
91-
description=_("Get portal historical conversation by page"),
92-
summary=_("Get portal historical conversation by page"),
93-
operation_id=_("Get portal historical conversation by page"),
94-
parameters=PortalAPI.Conversation.get_parameters(),
95-
responses=PortalAPI.Conversation.get_response(),
96-
tags=[_("Portal")],
97-
)
98-
def get(self, request: Request, current_page: int, page_size: int):
99-
return result.success(
100-
PortalHistoricalConversationSerializer.Query(
101-
data={**query_params_to_single_dict(request.query_params)}
102-
).page(current_page, page_size, str(request.user.id))
103-
)
104-
105-
10662
class PortalLoginView(APIView):
10763
@extend_schema(
10864
methods=["POST"],

0 commit comments

Comments
 (0)