Skip to content

Commit ecc7353

Browse files
committed
refactor: refactor permission handling to utilize PermissionConstants for improved clarity and maintainability
1 parent 1e22088 commit ecc7353

2 files changed

Lines changed: 72 additions & 57 deletions

File tree

‎apps/system_manage/serializers/user_group_resource_permission.py‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
from common.constants.cache_version import Cache_Version
2222
from common.auth.constants.role_constants import RoleConstants
2323
from common.constants.resource_permission_constants import ResourceAuthType, ResourcePermissionConstants
24-
from common.database_model_manage.database_model_manage import DatabaseModelManage
2524
from common.db.search import native_search, native_page_search, get_dynamics_model
2625
from common.db.sql_execute import select_list
2726
from common.exception.app_exception import AppApiException
@@ -373,7 +372,7 @@ def get_queryset(self, instance):
373372
permission = instance.get("permission")
374373
query_p_list = [None if p == "NOT_AUTH" else p for p in permission]
375374

376-
workspace_user_resource_permission_query_set = QuerySet(WorkspaceUserGroupResourcePermission).filter(
375+
workspace_user_group_resource_permission_query_set = QuerySet(WorkspaceUserGroupResourcePermission).filter(
377376
workspace_id=self.data.get("workspace_id"),
378377
auth_target_type=self.data.get("auth_target_type"),
379378
target=self.data.get("target"),
@@ -389,7 +388,7 @@ def get_queryset(self, instance):
389388
else:
390389
user_query_set = user_query_set.filter(permission__in=query_p_list)
391390
return {
392-
"workspace_user_resource_permission_query_set": workspace_user_resource_permission_query_set,
391+
"workspace_user_group_resource_permission_query_set": workspace_user_group_resource_permission_query_set,
393392
"user_query_set": user_query_set,
394393
}
395394

Lines changed: 70 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# coding=utf-8
22
"""
3-
@project: MaxKB
4-
@Author:虎虎
5-
@file: resource_mapping.py
6-
@date:2025/12/25 15:28
7-
@desc:
3+
@project: MaxKB
4+
@Author:虎虎
5+
@file: resource_mapping.py
6+
@date:2025/12/25 15:28
7+
@desc:
88
"""
99

1010
from django.utils.translation import gettext_lazy as _
@@ -16,11 +16,9 @@
1616
from common.auth import TokenAuth
1717
from common.auth.authentication import has_permissions
1818
from common.auth.constants.compare_constants import CompareConstants
19-
from common.auth.constants.group_constants import Group
20-
from common.auth.constants.operate_constants import Operate
19+
from common.auth.constants.permission_constants import PermissionConstants
2120
from common.auth.constants.role_constants import RoleConstants
2221
from common.auth.struct.aggregate_permission import ViewPermission
23-
from common.auth.struct.permission import Permission
2422
from system_manage.api.resource_mapping import ResourceMappingAPI
2523
from system_manage.serializers.resource_mapping_serializers import ResourceMappingSerializer, MappingResourceSerializer
2624

@@ -29,65 +27,83 @@ class ResourceMappingView(APIView):
2927
authentication_classes = [TokenAuth]
3028

3129
@extend_schema(
32-
methods=['GET'],
33-
description=_('Retrieve the pagination list of resource relationships'),
34-
operation_id=_('Retrieve the pagination list of resource relationships'), # type: ignore
30+
methods=["GET"],
31+
description=_("Retrieve the pagination list of resource relationships"),
32+
operation_id=_("Retrieve the pagination list of resource relationships"), # type: ignore
3533
responses=ResourceMappingAPI.get_response(),
3634
parameters=ResourceMappingAPI.get_parameters(),
37-
tags=[_('Resources mapping')] # type: ignore
35+
tags=[_("Resources mapping")], # type: ignore
3836
)
3937
@has_permissions(
40-
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
41-
operate=Operate.RELATE_VIEW,
42-
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/WORKSPACE_MANAGE"),
43-
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
44-
operate=Operate.RELATE_VIEW,
45-
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('resource_id')}"),
46-
ViewPermission([RoleConstants.USER.get_workspace_role()],
47-
[lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
48-
operate=Operate.SELF,
49-
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('resource_id')}")],
50-
compare=CompareConstants.AND),
51-
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
38+
lambda r, kwargs: PermissionConstants[
39+
f"{kwargs.get('resource')}_RELATE_RESOURCE_VIEW"
40+
].get_workspace_permission_workspace_manage_role()(r, kwargs),
41+
lambda r, kwargs: PermissionConstants[
42+
f"{kwargs.get('resource')}_RELATE_RESOURCE_VIEW"
43+
]._build_workspace_permission(resource_id_key="resource_id")(r, kwargs),
44+
ViewPermission(
45+
[RoleConstants.USER.get_workspace_role()],
46+
[
47+
lambda r, kwargs: PermissionConstants[kwargs.get("resource")]._build_workspace_permission(
48+
resource_id_key="resource_id"
49+
)(r, kwargs)
50+
],
51+
compare=CompareConstants.AND,
52+
),
53+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
54+
)
5255
def get(self, request: Request, workspace_id: str, resource: str, resource_id: str, current_page, page_size):
53-
return result.success(ResourceMappingSerializer({
54-
'resource': resource,
55-
'resource_id': resource_id,
56-
'resource_name': request.query_params.get('resource_name'),
57-
'user_name': request.query_params.get('user_name'),
58-
'source_type': request.query_params.getlist('source_type[]'),
59-
}).page(current_page, page_size))
56+
return result.success(
57+
ResourceMappingSerializer(
58+
{
59+
"resource": resource,
60+
"resource_id": resource_id,
61+
"resource_name": request.query_params.get("resource_name"),
62+
"user_name": request.query_params.get("user_name"),
63+
"source_type": request.query_params.getlist("source_type[]"),
64+
}
65+
).page(current_page, page_size)
66+
)
6067

6168

6269
class MappingResourceView(APIView):
6370
authentication_classes = [TokenAuth]
6471

6572
@extend_schema(
66-
methods=['GET'],
67-
description=_('Retrieve the pagination list of resource relationships'),
68-
operation_id=_('Retrieve the pagination list of resource relationships'), # type: ignore
73+
methods=["GET"],
74+
description=_("Retrieve the pagination list of resource relationships"),
75+
operation_id=_("Retrieve the pagination list of resource relationships"), # type: ignore
6976
responses=ResourceMappingAPI.get_response(),
7077
parameters=ResourceMappingAPI.get_parameters(),
71-
tags=[_('Mapping Resource')] # type: ignore
78+
tags=[_("Mapping Resource")], # type: ignore
7279
)
7380
@has_permissions(
74-
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
75-
operate=Operate.RELATE_VIEW,
76-
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/WORKSPACE_MANAGE"),
77-
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
78-
operate=Operate.RELATE_VIEW,
79-
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('resource_id')}"),
80-
ViewPermission([RoleConstants.USER.get_workspace_role()],
81-
[lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
82-
operate=Operate.SELF,
83-
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('resource_id')}")],
84-
compare=CompareConstants.AND),
85-
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
81+
lambda r, kwargs: PermissionConstants[
82+
f"{kwargs.get('resource')}_RELATE_RESOURCE_VIEW"
83+
].get_workspace_permission_workspace_manage_role()(r, kwargs),
84+
lambda r, kwargs: PermissionConstants[
85+
f"{kwargs.get('resource')}_RELATE_RESOURCE_VIEW"
86+
]._build_workspace_permission(resource_id_key="resource_id")(r, kwargs),
87+
ViewPermission(
88+
[RoleConstants.USER.get_workspace_role()],
89+
[
90+
lambda r, kwargs: PermissionConstants[kwargs.get("resource")]._build_workspace_permission(
91+
resource_id_key="resource_id"
92+
)(r, kwargs)
93+
],
94+
compare=CompareConstants.AND,
95+
),
96+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
97+
)
8698
def get(self, request: Request, workspace_id: str, resource: str, resource_id: str, current_page, page_size):
87-
return result.success(MappingResourceSerializer({
88-
'resource': resource,
89-
'resource_id': resource_id,
90-
'resource_name': request.query_params.get('resource_name'),
91-
'user_name': request.query_params.get('user_name'),
92-
'target_type': request.query_params.getlist('target_type[]'),
93-
}).page(current_page, page_size))
99+
return result.success(
100+
MappingResourceSerializer(
101+
{
102+
"resource": resource,
103+
"resource_id": resource_id,
104+
"resource_name": request.query_params.get("resource_name"),
105+
"user_name": request.query_params.get("user_name"),
106+
"target_type": request.query_params.getlist("target_type[]"),
107+
}
108+
).page(current_page, page_size)
109+
)

0 commit comments

Comments
 (0)