66
77from common .auth import TokenAuth
88from common .auth .authentication import has_permissions
9- from common .constants .permission_constants import Permission , Group , Operate , RoleConstants
9+ from common .constants .permission_constants import Permission , Group , Operate , RoleConstants , ViewPermission , \
10+ PermissionConstants , CompareConstants
1011from common .log .log import log
1112from common .result import result
1213from folders .api .folder import FolderCreateAPI , FolderEditAPI , FolderReadAPI , FolderTreeReadAPI , FolderDeleteAPI
@@ -37,9 +38,17 @@ class FolderView(APIView):
3738 tags = [_ ('Folder' )] # type: ignore
3839 )
3940 @has_permissions (
40- lambda r , kwargs : Permission (group = Group (kwargs .get ('source' )), operate = Operate .CREATE ,
41- resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} " ),
42- RoleConstants .WORKSPACE_MANAGE .get_workspace_role (), RoleConstants .USER .get_workspace_role ()
41+ lambda r , kwargs : Permission (group = Group (f"{ kwargs .get ('source' )} _FOLDER" ), operate = Operate .EDIT ,
42+ resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} /{ kwargs .get ('source' )} /{ r .data .get ('parent_id' )} " ),
43+ lambda r , kwargs : Permission (group = Group (kwargs .get ('source' )), operate = Operate .EDIT ,
44+ resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} /ROLE/WORKSPACE_MANAGE"
45+ ),
46+ lambda r , kwargs : ViewPermission ([RoleConstants .USER .get_workspace_role ()],
47+ [Permission (group = Group (f"{ kwargs .get ('source' )} _FOLDER" ),
48+ operate = Operate .SELF ,
49+ resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} /{ kwargs .get ('source' )} /{ r .data .get ('parent_id' )} "
50+ )], CompareConstants .AND ),
51+ RoleConstants .WORKSPACE_MANAGE .get_workspace_role ()
4352 )
4453 @log (
4554 menu = 'folder' , operate = 'Create folder' ,
@@ -63,7 +72,8 @@ def post(self, request: Request, workspace_id: str, source: str):
6372 tags = [_ ('Folder' )] # type: ignore
6473 )
6574 @has_permissions (
66- lambda r , kwargs : Permission (group = Group (f"{ kwargs .get ('source' )} _WORKSPACE_USER_RESOURCE_PERMISSION" ), operate = Operate .READ ,
75+ lambda r , kwargs : Permission (group = Group (f"{ kwargs .get ('source' )} _WORKSPACE_USER_RESOURCE_PERMISSION" ),
76+ operate = Operate .READ ,
6777 resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} " ),
6878 lambda r , kwargs : Permission (group = Group (kwargs .get ('source' )), operate = Operate .READ ,
6979 resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} " ),
@@ -73,7 +83,7 @@ def post(self, request: Request, workspace_id: str, source: str):
7383 def get (self , request : Request , workspace_id : str , source : str ):
7484 return result .success (FolderTreeSerializer (
7585 data = {'workspace_id' : workspace_id , 'source' : source }
76- ).get_folder_tree (request .query_params .get ('name' )))
86+ ).get_folder_tree (request .user , request . query_params .get ('name' )))
7787
7888 class Operate (APIView ):
7989 authentication_classes = [TokenAuth ]
@@ -90,8 +100,17 @@ class Operate(APIView):
90100 )
91101 @has_permissions (
92102 lambda r , kwargs : Permission (group = Group (kwargs .get ('source' )), operate = Operate .EDIT ,
93- resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} " ),
94- RoleConstants .WORKSPACE_MANAGE .get_workspace_role (), RoleConstants .USER .get_workspace_role ()
103+ resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} /ROLE/WORKSPACE_MANAGE"
104+ ),
105+ lambda r , kwargs : Permission (group = Group (f"{ kwargs .get ('source' )} _FOLDER" ), operate = Operate .EDIT ,
106+ resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} /{ kwargs .get ('source' )} /{ kwargs .get ('folder_id' )} "
107+ ),
108+ lambda r , kwargs : ViewPermission ([RoleConstants .USER .get_workspace_role ()],
109+ [Permission (group = Group (f"{ kwargs .get ('source' )} _FOLDER" ),
110+ operate = Operate .SELF ,
111+ resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} /{ kwargs .get ('source' )} /{ kwargs .get ('folder_id' )} "
112+ )], CompareConstants .AND ),
113+ RoleConstants .WORKSPACE_MANAGE .get_workspace_role ()
95114 )
96115 @log (
97116 menu = 'folder' , operate = 'Edit folder' ,
@@ -132,9 +151,18 @@ def get(self, request: Request, workspace_id: str, source: str, folder_id: str):
132151 tags = [_ ('Folder' )] # type: ignore
133152 )
134153 @has_permissions (
135- lambda r , kwargs : Permission (group = Group (kwargs .get ('source' )), operate = Operate .DELETE ,
136- resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} " ),
137- RoleConstants .WORKSPACE_MANAGE .get_workspace_role (), RoleConstants .USER .get_workspace_role ()
154+ lambda r , kwargs : Permission (group = Group (kwargs .get ('source' )), operate = Operate .EDIT ,
155+ resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} /ROLE/WORKSPACE_MANAGE"
156+ ),
157+ lambda r , kwargs : Permission (group = Group (f"{ kwargs .get ('source' )} _FOLDER" ), operate = Operate .EDIT ,
158+ resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} /{ kwargs .get ('source' )} /{ kwargs .get ('folder_id' )} "
159+ ),
160+ lambda r , kwargs : ViewPermission ([RoleConstants .USER .get_workspace_role ()],
161+ [Permission (group = Group (f"{ kwargs .get ('source' )} _FOLDER" ),
162+ operate = Operate .SELF ,
163+ resource_path = f"/WORKSPACE/{ kwargs .get ('workspace_id' )} /{ kwargs .get ('source' )} /{ kwargs .get ('folder_id' )} "
164+ )], CompareConstants .AND ),
165+ RoleConstants .WORKSPACE_MANAGE .get_workspace_role ()
138166 )
139167 @log (
140168 menu = 'folder' , operate = 'Delete folder' ,
0 commit comments