Skip to content

Commit 293c64d

Browse files
committed
feat: Backend permissions for resource authorization
1 parent ed42442 commit 293c64d

File tree

4 files changed

+41
-13
lines changed

4 files changed

+41
-13
lines changed

apps/locales/en_US/LC_MESSAGES/django.po

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8659,5 +8659,5 @@ msgstr ""
86598659
msgid "The Qwen Omni series model supports inputting multiple modalities of data, including video, audio, images, and text, and outputting audio and text."
86608660
msgstr ""
86618661

8662-
msgid "Resource authorization"
8662+
msgid "resource authorization"
86638663
msgstr ""

apps/locales/zh_CN/LC_MESSAGES/django.po

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8785,5 +8785,5 @@ msgstr "如果未传递,默认值为 这段音频在说什么,只回答音
87858785
msgid "The Qwen Omni series model supports inputting multiple modalities of data, including video, audio, images, and text, and outputting audio and text."
87868786
msgstr "Qwen-Omni 系列模型支持输入多种模态的数据,包括视频、音频、图片、文本,并输出音频与文本"
87878787

8788-
msgid "Resource authorization"
8788+
msgid "resource authorization"
87898789
msgstr "资源授权"

apps/locales/zh_Hant/LC_MESSAGES/django.po

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8785,5 +8785,5 @@ msgstr "如果未傳遞,預設值為這段音訊在說什麼,只回答音訊
87858785
msgid "The Qwen Omni series model supports inputting multiple modalities of data, including video, audio, images, and text, and outputting audio and text."
87868786
msgstr "Qwen-Omni系列模型支持輸入多種模態的數據,包括視頻、音訊、圖片、文字,並輸出音訊與文字"
87878787

8788-
msgid "Resource authorization"
8788+
msgid "resource authorization"
87898789
msgstr "資源授權"

apps/system_manage/views/user_resource_permission.py

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
from common import result
1616
from common.auth import TokenAuth
1717
from common.auth.authentication import has_permissions
18-
from common.constants.permission_constants import PermissionConstants, RoleConstants, Permission, Group, Operate
18+
from common.constants.permission_constants import RoleConstants, Permission, Group, Operate, ViewPermission, \
19+
CompareConstants
1920
from common.log.log import log
2021
from system_manage.api.user_resource_permission import UserResourcePermissionAPI, EditUserResourcePermissionAPI, \
2122
ResourceUserPermissionAPI, ResourceUserPermissionPageAPI, ResourceUserPermissionEditAPI, \
@@ -114,9 +115,18 @@ class WorkspaceResourceUserPermissionView(APIView):
114115
tags=[_('Resources authorization')] # type: ignore
115116
)
116117
@has_permissions(
117-
lambda r, kwargs: Permission(group=Group(kwargs.get('resource') + '_RESOURCE_AUTHORIZATION'),
118-
operate=Operate.AUTH),
119-
RoleConstants.ADMIN, RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
118+
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
119+
operate=Operate.AUTH,
120+
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/ROLE/WORKSPACE_MANAGE"),
121+
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
122+
operate=Operate.AUTH,
123+
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('target')}"),
124+
ViewPermission([RoleConstants.USER.get_workspace_role()],
125+
[lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
126+
operate=Operate.SELF,
127+
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('target')}")],
128+
CompareConstants.AND),
129+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
120130
def get(self, request: Request, workspace_id: str, target: str, resource: str):
121131
return result.success(ResourceUserPermissionSerializer(
122132
data={'workspace_id': workspace_id, "target": target, 'auth_target_type': resource,
@@ -139,9 +149,18 @@ def get(self, request: Request, workspace_id: str, target: str, resource: str):
139149
get_operation_object=lambda r, k: get_user_operation_object(k.get('user_id'))
140150
)
141151
@has_permissions(
142-
lambda r, kwargs: Permission(group=Group(kwargs.get('resource') + '_RESOURCE_AUTHORIZATION'),
143-
operate=Operate.AUTH),
144-
RoleConstants.ADMIN, RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
152+
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
153+
operate=Operate.AUTH,
154+
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/ROLE/WORKSPACE_MANAGE"),
155+
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
156+
operate=Operate.AUTH,
157+
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('target')}"),
158+
ViewPermission([RoleConstants.USER.get_workspace_role()],
159+
[lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
160+
operate=Operate.SELF,
161+
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('target')}")],
162+
CompareConstants.AND),
163+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
145164
def put(self, request: Request, workspace_id: str, target: str, resource: str):
146165
return result.success(ResourceUserPermissionSerializer(
147166
data={'workspace_id': workspace_id, "target": target, 'auth_target_type': resource, })
@@ -160,9 +179,18 @@ class Page(APIView):
160179
tags=[_('Resources authorization')] # type: ignore
161180
)
162181
@has_permissions(
163-
lambda r, kwargs: Permission(group=Group(kwargs.get('resource') + '_RESOURCE_AUTHORIZATION'),
164-
operate=Operate.AUTH),
165-
RoleConstants.ADMIN, RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
182+
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
183+
operate=Operate.AUTH,
184+
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/ROLE/WORKSPACE_MANAGE"),
185+
lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
186+
operate=Operate.AUTH,
187+
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('target')}"),
188+
ViewPermission([RoleConstants.USER.get_workspace_role()],
189+
[lambda r, kwargs: Permission(group=Group(kwargs.get('resource')),
190+
operate=Operate.SELF,
191+
resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource')}/{kwargs.get('target')}")],
192+
CompareConstants.AND),
193+
RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
166194
def get(self, request: Request, workspace_id: str, target: str, resource: str, current_page: int,
167195
page_size: int):
168196
return result.success(ResourceUserPermissionSerializer(

0 commit comments

Comments
 (0)