Skip to content

Commit 9a8c8cc

Browse files
committed
feat: The folder creator manages permissions and the root directory displays all resources
1 parent fae540c commit 9a8c8cc

File tree

5 files changed

+18
-8
lines changed

5 files changed

+18
-8
lines changed

apps/application/serializers/application.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ def get_query_set(self, instance: Dict, workspace_manage: bool, is_x_pack_ee: bo
333333
folder_query_set = folder_query_set.filter(workspace_id=workspace_id)
334334
application_query_set = application_query_set.filter(workspace_id=workspace_id)
335335
folder_id = instance.get('folder_id')
336-
if folder_id is not None:
336+
if folder_id is not None and folder_id != workspace_id:
337337
folder_query_set = folder_query_set.filter(parent=folder_id)
338338
application_query_set = application_query_set.filter(folder_id=folder_id)
339339
if name is not None:

apps/folders/serializers/folder.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from knowledge.serializers.knowledge import KnowledgeSerializer
1717
from knowledge.serializers.knowledge_folder import KnowledgeFolderTreeSerializer
1818
from system_manage.models import WorkspaceUserResourcePermission
19+
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
1920
from tools.models import ToolFolder, Tool
2021
from tools.serializers.tool import ToolSerializer
2122
from tools.serializers.tool_folder import ToolFolderTreeSerializer
@@ -139,6 +140,13 @@ def insert(self, instance, with_valid=True):
139140
parent_id=parent_id
140141
)
141142
folder.save()
143+
144+
UserResourcePermissionSerializer(data={
145+
'workspace_id': self.data.get('workspace_id'),
146+
'user_id': self.data.get('user_id'),
147+
'auth_target_type': self.data.get('source')
148+
}).auth_resource(str(folder.id), is_folder=True)
149+
142150
return FolderSerializer(folder).data
143151

144152
class Operate(serializers.Serializer):

apps/knowledge/serializers/knowledge.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def get_query_set(self, workspace_manage, is_x_pack_ee):
148148
if "workspace_id" in self.data and self.data.get('workspace_id') is not None:
149149
query_set = query_set.filter(**{'temp.workspace_id': self.data.get("workspace_id")})
150150
folder_query_set = folder_query_set.filter(**{'workspace_id': self.data.get("workspace_id")})
151-
if "folder_id" in self.data and self.data.get('folder_id') is not None:
151+
if "folder_id" in self.data and self.data.get('folder_id') is not None and self.data.get('workspace_id') != self.data.get('folder_id'):
152152
query_set = query_set.filter(**{'temp.folder_id': self.data.get("folder_id")})
153153
folder_query_set = folder_query_set.filter(**{'parent_id': self.data.get("folder_id")})
154154
if "scope" in self.data and self.data.get('scope') is not None:

apps/system_manage/serializers/user_resource_permission.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ def is_valid(self, *, auth_target_type=None, workspace_id=None, raise_exception=
7373
illegal_target_id_list = select_list(
7474
get_file_content(
7575
os.path.join(PROJECT_DIR, "apps", "system_manage", 'sql', 'check_member_permission_target_exists.sql')),
76-
[json.dumps(user_resource_permission_list), workspace_id, workspace_id, workspace_id, workspace_id,workspace_id,workspace_id,workspace_id])
76+
[json.dumps(user_resource_permission_list), workspace_id, workspace_id, workspace_id, workspace_id,
77+
workspace_id, workspace_id, workspace_id])
7778
if illegal_target_id_list is not None and len(illegal_target_id_list) > 0:
7879
raise AppApiException(500,
7980
_('Non-existent id[') + str(illegal_target_id_list) + ']')
@@ -192,7 +193,7 @@ def auth_resource_batch(self, resource_id_list: list):
192193
cache.delete(key, version=version)
193194
return True
194195

195-
def auth_resource(self, resource_id: str):
196+
def auth_resource(self, resource_id: str, is_folder=False):
196197
self.is_valid(raise_exception=True)
197198
auth_target_type = self.data.get('auth_target_type')
198199
workspace_id = self.data.get('workspace_id')
@@ -206,11 +207,12 @@ def auth_resource(self, resource_id: str):
206207
target=resource_id,
207208
auth_target_type=auth_target_type,
208209
permission_list=[ResourcePermission.VIEW,
209-
ResourcePermission.MANAGE] if auth_type == ResourceAuthType.RESOURCE_PERMISSION_GROUP else [
210+
ResourcePermission.MANAGE] if (
211+
auth_type == ResourceAuthType.RESOURCE_PERMISSION_GROUP or is_folder) else [
210212
ResourcePermissionRole.ROLE],
211213
workspace_id=workspace_id,
212214
user_id=user_id,
213-
auth_type=auth_type
215+
auth_type=ResourceAuthType.RESOURCE_PERMISSION_GROUP if is_folder else auth_type
214216
).save()
215217
# 刷新缓存
216218
version = Cache_Version.PERMISSION_LIST.get_version()
@@ -358,7 +360,7 @@ def get_queryset(self, instance):
358360
permission__in=query_p_list)
359361
workspace_user_role_mapping_model = DatabaseModelManage.get_model("workspace_user_role_mapping")
360362
if workspace_user_role_mapping_model:
361-
user_query_set=user_query_set.filter(
363+
user_query_set = user_query_set.filter(
362364
id__in=QuerySet(workspace_user_role_mapping_model).filter(
363365
workspace_id=self.data.get('workspace_id')).values("user_id"))
364366

apps/tools/serializers/tool.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,7 @@ def get_query_set(self, workspace_manage, is_x_pack_ee):
921921
if workspace_id is not None:
922922
folder_query_set = folder_query_set.filter(workspace_id=workspace_id)
923923
default_query_set = default_query_set.filter(workspace_id=workspace_id)
924-
if folder_id is not None:
924+
if folder_id is not None and folder_id != workspace_id:
925925
folder_query_set = folder_query_set.filter(parent=folder_id)
926926
default_query_set = default_query_set.filter(folder_id=folder_id)
927927
if name is not None:

0 commit comments

Comments
 (0)