Skip to content

Commit 73d446a

Browse files
committed
fix: application page
1 parent e0bfe0c commit 73d446a

File tree

8 files changed

+90
-17
lines changed

8 files changed

+90
-17
lines changed

apps/application/serializers/application.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from tools.models import Tool, ToolScope
3939
from tools.serializers.tool import ToolModelSerializer
4040
from users.models import User
41+
from users.serializers.user import is_workspace_manage
4142

4243

4344
def get_base_node_work_flow(work_flow):
@@ -290,9 +291,10 @@ class ApplicationListResponse(serializers.Serializer):
290291

291292

292293
class Query(serializers.Serializer):
293-
workspace_id = serializers.CharField(required=False, label=_('workspace id'))
294+
workspace_id = serializers.CharField(required=False, label=_('Workspace ID'))
295+
user_id = serializers.UUIDField(required=True, label=_("User ID"))
294296

295-
def get_query_set(self, instance: Dict):
297+
def get_query_set(self, instance: Dict, workspace_manage: bool):
296298
folder_query_set = QuerySet(ApplicationFolder)
297299
application_query_set = QuerySet(Application)
298300
workspace_id = self.data.get('workspace_id')
@@ -315,11 +317,14 @@ def get_query_set(self, instance: Dict):
315317
if desc is not None:
316318
folder_query_set = folder_query_set.filter(desc__contains=desc)
317319
application_query_set = application_query_set.filter(desc__contains=desc)
320+
application_custom_sql_query_set = application_query_set
318321
application_query_set = application_query_set.order_by("-update_time")
319322
return {
320323
'folder_query_set': folder_query_set,
321-
'application_query_set': application_query_set
322-
}
324+
'application_query_set': application_query_set,
325+
'application_custom_sql': application_custom_sql_query_set
326+
} if workspace_manage else {'folder_query_set': folder_query_set,
327+
'application_query_set': application_query_set}
323328

324329
@staticmethod
325330
def is_x_pack_ee():
@@ -329,17 +334,28 @@ def is_x_pack_ee():
329334

330335
def list(self, instance: Dict):
331336
self.is_valid(raise_exception=True)
337+
workspace_id = self.data.get('workspace_id')
338+
user_id = self.data.get("user_id")
332339
ApplicationQueryRequest(data=instance).is_valid(raise_exception=True)
333-
return native_search(self.get_query_set(instance), select_string=get_file_content(
340+
workspace_manage = is_workspace_manage(user_id, workspace_id)
341+
342+
return native_search(self.get_query_set(instance, workspace_manage), select_string=get_file_content(
334343
os.path.join(PROJECT_DIR, "apps", "application", 'sql',
335-
'list_application_ee.sql' if self.is_x_pack_ee() else 'list_application.sql')))
344+
'list_application.sql' if workspace_manage else (
345+
'list_application_user_ee.sql' if self.is_x_pack_ee() else 'list_application_user.sql')
346+
)))
336347

337348
def page(self, current_page: int, page_size: int, instance: Dict):
338349
self.is_valid(raise_exception=True)
339350
ApplicationQueryRequest(data=instance).is_valid(raise_exception=True)
340-
return native_page_search(current_page, page_size, self.get_query_set(instance), get_file_content(
341-
os.path.join(PROJECT_DIR, "apps", "application", 'sql',
342-
'list_application_ee.sql' if self.is_x_pack_ee() else 'list_application.sql')),
351+
workspace_id = self.data.get('workspace_id')
352+
user_id = self.data.get("user_id")
353+
workspace_manage = is_workspace_manage(user_id, workspace_id)
354+
return native_page_search(current_page, page_size, self.get_query_set(instance, workspace_manage),
355+
get_file_content(
356+
os.path.join(PROJECT_DIR, "apps", "application", 'sql',
357+
'list_application.sql' if workspace_manage else (
358+
'list_application_user_ee.sql' if self.is_x_pack_ee() else 'list_application_user.sql'))),
343359
)
344360

345361

apps/application/sql/list_application.sql

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@ from (select "id"::text,
1111
"create_time",
1212
"update_time"
1313
from application
14-
where id in (select target
15-
from workspace_user_resource_permission
16-
where auth_target_type = 'APPLICATION'
17-
and 'VIEW' = any (permission_list))
14+
${application_custom_sql}
1815
UNION
1916
select "id",
2017
"name",
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
select *
2+
from (select "id"::text,
3+
"name",
4+
"desc",
5+
"is_publish",
6+
"type",
7+
'application' as "resource_type",
8+
"workspace_id",
9+
"folder_id",
10+
"user_id",
11+
"create_time",
12+
"update_time"
13+
from application
14+
where id in (select target
15+
from workspace_user_resource_permission
16+
where auth_target_type = 'APPLICATION'
17+
and 'VIEW' = any (permission_list))
18+
UNION
19+
select "id",
20+
"name",
21+
"desc",
22+
true as "is_publish",
23+
'folder' as "type",
24+
'folder' as "resource_type",
25+
"workspace_id",
26+
"parent_id" as "folder_id",
27+
"user_id",
28+
"create_time",
29+
"update_time"
30+
from application_folder ${folder_query_set}) temp
31+
${application_query_set}
File renamed without changes.

apps/application/views/application_chat_record.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from common import result
1919
from common.auth import TokenAuth
2020
from common.auth.authentication import has_permissions
21-
from common.constants.permission_constants import PermissionConstants
21+
from common.constants.permission_constants import PermissionConstants, RoleConstants
2222
from common.utils.common import query_params_to_single_dict
2323

2424

@@ -35,7 +35,8 @@ class ApplicationChatRecord(APIView):
3535
responses=ApplicationChatRecordQueryAPI.get_response(),
3636
tags=[_("Application/Conversation Log")] # type: ignore
3737
)
38-
@has_permissions(PermissionConstants.APPLICATION_CHAT_LOG.get_workspace_application_permission())
38+
@has_permissions(PermissionConstants.APPLICATION_CHAT_LOG.get_workspace_application_permission(),
39+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
3940
def get(self, request: Request, workspace_id: str, application_id: str, chat_id: str):
4041
return result.success(ApplicationChatRecordQuerySerializers(
4142
data={**query_params_to_single_dict(request.query_params), 'application_id': application_id,

apps/common/auth/handle/impl/user_token.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
from common.constants.cache_version import Cache_Version
2020
from common.constants.permission_constants import Auth, PermissionConstants, ResourcePermissionGroup, \
2121
get_permission_list_by_resource_group, ResourceAuthType, \
22-
ResourcePermissionRole, get_default_role_permission_mapping_list, get_default_workspace_user_role_mapping_list
22+
ResourcePermissionRole, get_default_role_permission_mapping_list, get_default_workspace_user_role_mapping_list, \
23+
RoleConstants
2324
from common.database_model_manage.database_model_manage import DatabaseModelManage
2425
from common.exception.app_exception import AppAuthenticationFailed
2526
from common.utils.common import group_by
@@ -50,6 +51,18 @@ def get_workspace_permission(permission_id, workspace_id):
5051
return f"{permission_id}:/WORKSPACE/{workspace_id}"
5152

5253

54+
def get_role_permission(role, workspace_id):
55+
"""
56+
获取工作空间角色
57+
@param role: 角色
58+
@param workspace_id: 工作空间id
59+
@return:
60+
"""
61+
if isinstance(role, RoleConstants):
62+
role = role.value
63+
return f"{role}:/WORKSPACE/{workspace_id}"
64+
65+
5366
def get_workspace_permission_list(role_permission_mapping_dict, workspace_user_role_mapping_list):
5467
"""
5568
获取工作空间下所有的权限
@@ -212,7 +225,7 @@ def get_role_list(user,
212225
workspace_user_role_mapping_list] + [user.role], version=version)
213226
else:
214227
cache.set(key, [user.role], version=version)
215-
return [user.role]
228+
return [user.role, get_role_permission(RoleConstants.WORKSPACE_MANAGE, 'default')]
216229
return workspace_list
217230

218231

apps/common/constants/permission_constants.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,10 @@ def __str__(self):
184184
def __eq__(self, other):
185185
return str(self) == str(other)
186186

187+
def get_workspace_role(self):
188+
return lambda r, kwargs: Role(self.name, self.decs, self.group,
189+
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}")
190+
187191

188192
class RoleConstants(Enum):
189193
ADMIN = Role("ADMIN", '超级管理员', RoleGroup.SYSTEM_USER)

apps/users/serializers/user.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,17 @@ class CreateUserSerializer(serializers.Serializer):
6060
phone = serializers.CharField(required=False, label=_('Phone'))
6161

6262

63+
def is_workspace_manage(user_id: str, workspace_id: str):
64+
workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping")
65+
role_permission_mapping_model = DatabaseModelManage.get_model("role_permission_mapping_model")
66+
is_x_pack_ee = workspace_user_role_mapping_model is not None and role_permission_mapping_model is not None
67+
if is_x_pack_ee:
68+
return QuerySet(workspace_user_role_mapping_model).select_related('role', 'user').filter(
69+
workspace_id=workspace_id, user_id=user_id,
70+
role_type=RoleConstants.WORKSPACE_MANAGE.value.__str__()).exists()
71+
return QuerySet(User).filter(id=user_id, role=RoleConstants.ADMIN.value.__str__()).exists()
72+
73+
6374
class UserProfileSerializer(serializers.Serializer):
6475
@staticmethod
6576
def profile(user: User, auth: Auth):

0 commit comments

Comments
 (0)