Skip to content

Commit 700351f

Browse files
committed
feat: UserResourcePermission
1 parent 5481b8a commit 700351f

File tree

9 files changed

+143
-0
lines changed

9 files changed

+143
-0
lines changed

apps/common/constants/permission_constants.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class Group(Enum):
2626

2727
TOOL = "TOOL"
2828

29+
WORKSPACE_USER_RESOURCE_PERMISSION = "WORKSPACE_USER_RESOURCE_PERMISSION"
30+
2931

3032
class Operate(Enum):
3133
"""
@@ -218,6 +220,11 @@ class PermissionConstants(Enum):
218220
KNOWLEDGE_CREATE = Permission(group=Group.KNOWLEDGE, operate=Operate.CREATE, role_list=[RoleConstants.ADMIN,
219221
RoleConstants.USER])
220222

223+
WORKSPACE_USER_RESOURCE_PERMISSION_READ = Permission(group=Group.WORKSPACE_USER_RESOURCE_PERMISSION,
224+
operate=Operate.READ,
225+
role_list=[RoleConstants.ADMIN,
226+
RoleConstants.WORKSPACE_MANAGE])
227+
221228
def get_workspace_application_permission(self):
222229
return lambda r, kwargs: Permission(group=self.value.group, operate=self.value.operate,
223230
resource_path=

apps/maxkb/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
path("api/", include("models_provider.urls")),
2727
path("api/", include("folders.urls")),
2828
path("api/", include("knowledge.urls")),
29+
path("api/", include("system_manage.urls")),
2930
]
3031
urlpatterns += [
3132
path('schema/', SpectacularAPIView.as_view(), name='schema'), # schema的配置文件的路由,下面两个ui也是根据这个配置文件来生成的

apps/system_manage/api/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# coding=utf-8
2+
"""
3+
@project: MaxKB
4+
@Author:虎虎
5+
@file: __init__.py
6+
@date:2025/4/28 17:05
7+
@desc:
8+
"""
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# coding=utf-8
2+
"""
3+
@project: MaxKB
4+
@Author:虎虎
5+
@file: workspace_user_resource_permission.py
6+
@date:2025/4/28 18:13
7+
@desc:
8+
"""
9+
from drf_spectacular.types import OpenApiTypes
10+
from drf_spectacular.utils import OpenApiParameter
11+
12+
from common.mixins.api_mixin import APIMixin
13+
from common.result import ResultSerializer
14+
from system_manage.serializers.user_resource_permission import UserResourcePermissionResponse
15+
16+
17+
class APIUserResourcePermissionResponse(ResultSerializer):
18+
def get_data(self):
19+
return UserResourcePermissionResponse(many=True)
20+
21+
22+
class UserResourcePermissionAPI(APIMixin):
23+
@staticmethod
24+
def get_parameters():
25+
return [
26+
OpenApiParameter(
27+
name="workspace_id",
28+
description="工作空间id",
29+
type=OpenApiTypes.STR,
30+
location='path',
31+
required=True,
32+
)
33+
]
34+
35+
@staticmethod
36+
def get_response():
37+
return APIUserResourcePermissionResponse
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# coding=utf-8
2+
"""
3+
@project: MaxKB
4+
@Author:虎虎
5+
@file: __init__.py
6+
@date:2025/4/28 17:05
7+
@desc:
8+
"""
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# coding=utf-8
2+
"""
3+
@project: MaxKB
4+
@Author:虎虎
5+
@file: workspace_user_resource_permission.py
6+
@date:2025/4/28 17:17
7+
@desc:
8+
"""
9+
from django.db.models import QuerySet
10+
from rest_framework import serializers
11+
from django.utils.translation import gettext_lazy as _
12+
13+
from system_manage.models import WorkspaceUserResourcePermission
14+
15+
16+
class UserResourcePermissionResponse(serializers.ModelSerializer):
17+
class Meta:
18+
model = WorkspaceUserResourcePermission
19+
fields = [
20+
'id', 'workspace_id', 'user_id', 'auth_target_type', 'target',
21+
'auth_type', 'permission_list', 'create_time', 'update_time'
22+
]
23+
24+
25+
class UserResourcePermissionSerializer(serializers.Serializer):
26+
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
27+
28+
def list(self, with_valid=True):
29+
if with_valid:
30+
self.is_valid(raise_exception=True)
31+
workspace_id = self.data.get("workspace_id")
32+
workspace_user_resource_permission_list = QuerySet(WorkspaceUserResourcePermission).filter(
33+
workspace_id=workspace_id)
34+
return [UserResourcePermissionResponse(data=user_resource_permission).data for user_resource_permission in
35+
workspace_user_resource_permission_list]

apps/system_manage/urls.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from django.urls import path
2+
3+
from . import views
4+
5+
app_name = "system_manage"
6+
urlpatterns = [
7+
path('workspace/<str:workspace_id>/user_resource_permission', views.WorkSpaceUserResourcePermissionView.as_view())
8+
]

apps/system_manage/views/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
@date:2025/4/16 19:07
77
@desc:
88
"""
9+
from .user_resource_permission import *
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# coding=utf-8
2+
"""
3+
@project: MaxKB
4+
@Author:虎虎
5+
@file: workspace_user_resource_permission.py
6+
@date:2025/4/28 16:38
7+
@desc:
8+
"""
9+
from urllib.request import Request
10+
11+
from django.utils.translation import gettext_lazy as _
12+
from drf_spectacular.utils import extend_schema
13+
from rest_framework.views import APIView
14+
15+
from common import result
16+
from common.auth import TokenAuth
17+
from common.auth.authentication import has_permissions
18+
from common.constants.permission_constants import PermissionConstants
19+
from system_manage.api.user_resource_permission import UserResourcePermissionAPI
20+
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
21+
22+
23+
class WorkSpaceUserResourcePermissionView(APIView):
24+
authentication_classes = [TokenAuth]
25+
26+
@extend_schema(
27+
methods=['GET'],
28+
description=_('Obtain resource authorization list'),
29+
operation_id=_('Obtain resource authorization list'),
30+
parameters=UserResourcePermissionAPI.get_parameters(),
31+
responses=UserResourcePermissionAPI.get_response(),
32+
tags=[_('Resources authorization')]
33+
)
34+
@has_permissions(PermissionConstants.WORKSPACE_USER_RESOURCE_PERMISSION_READ.get_workspace_permission())
35+
def get(self, request: Request, workspace_id: str):
36+
return result.success(UserResourcePermissionSerializer(
37+
data={'workspace_id': workspace_id}
38+
).list())

0 commit comments

Comments
 (0)