2025-05-06 10:35:11 +00:00
|
|
|
|
# coding=utf-8
|
|
|
|
|
|
"""
|
|
|
|
|
|
@project: MaxKB
|
|
|
|
|
|
@Author:虎虎
|
|
|
|
|
|
@file: workspace_user_resource_permission.py
|
|
|
|
|
|
@date:2025/4/28 18:13
|
|
|
|
|
|
@desc:
|
|
|
|
|
|
"""
|
|
|
|
|
|
from drf_spectacular.types import OpenApiTypes
|
|
|
|
|
|
from drf_spectacular.utils import OpenApiParameter
|
2025-08-11 07:51:34 +00:00
|
|
|
|
from rest_framework import serializers
|
|
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
2025-05-06 10:35:11 +00:00
|
|
|
|
|
|
|
|
|
|
from common.mixins.api_mixin import APIMixin
|
2025-08-13 02:09:42 +00:00
|
|
|
|
from common.result import ResultSerializer, ResultPageSerializer, PageDataResponse
|
|
|
|
|
|
from system_manage.serializers.user_resource_permission import ResourceUserPermissionEditRequest, UpdateTeamMemberItemPermissionSerializer
|
2025-05-06 10:35:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
2025-08-13 02:09:42 +00:00
|
|
|
|
class UserResourcePermissionResponse0(serializers.Serializer):
|
|
|
|
|
|
id = serializers.UUIDField(required=True, label="主键id")
|
|
|
|
|
|
name = serializers.CharField(required=True, label="资源名称")
|
|
|
|
|
|
auth_target_type = serializers.CharField(required=True, label="授权资源")
|
|
|
|
|
|
user_id = serializers.UUIDField(required=True, label="用户id")
|
|
|
|
|
|
icon = serializers.CharField(required=True, label="资源图标")
|
|
|
|
|
|
auth_type = serializers.CharField(required=True, label="授权类型")
|
|
|
|
|
|
permission = serializers.ChoiceField(required=False, allow_null=True, allow_blank=True,
|
|
|
|
|
|
choices=['NOT_AUTH', 'MANAGE', 'VIEW', 'ROLE'],
|
|
|
|
|
|
label=_('permission'))
|
|
|
|
|
|
|
|
|
|
|
|
class NewAPIUserResourcePermissionResponse(ResultSerializer):
|
2025-05-06 10:35:11 +00:00
|
|
|
|
def get_data(self):
|
2025-08-13 02:09:42 +00:00
|
|
|
|
return UserResourcePermissionResponse0(many=True)
|
|
|
|
|
|
|
|
|
|
|
|
class NewAPIUserResourcePermissionPageResponse(ResultPageSerializer):
|
2025-05-06 10:35:11 +00:00
|
|
|
|
|
2025-08-13 02:09:42 +00:00
|
|
|
|
def get_data(self):
|
|
|
|
|
|
return UserResourcePermissionResponse0(many=True)
|
2025-05-06 10:35:11 +00:00
|
|
|
|
|
|
|
|
|
|
class UserResourcePermissionAPI(APIMixin):
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_parameters():
|
|
|
|
|
|
return [
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="workspace_id",
|
|
|
|
|
|
description="工作空间id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True,
|
2025-06-04 05:05:39 +00:00
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="user_id",
|
|
|
|
|
|
description="用户id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True,
|
|
|
|
|
|
),
|
2025-08-13 02:09:42 +00:00
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="name",
|
|
|
|
|
|
description="名称",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='query',
|
|
|
|
|
|
required=False
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="permission",
|
|
|
|
|
|
description="权限",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='query',
|
2025-08-14 08:08:36 +00:00
|
|
|
|
many=True,
|
2025-08-13 02:09:42 +00:00
|
|
|
|
required=False
|
|
|
|
|
|
),
|
2025-05-06 10:35:11 +00:00
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_response():
|
2025-08-13 02:09:42 +00:00
|
|
|
|
return NewAPIUserResourcePermissionResponse
|
2025-05-06 10:35:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EditUserResourcePermissionAPI(APIMixin):
|
2025-08-13 02:09:42 +00:00
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_parameters():
|
|
|
|
|
|
return [
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="workspace_id",
|
|
|
|
|
|
description="工作空间id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True,
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="user_id",
|
|
|
|
|
|
description="用户id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True,
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="resource",
|
|
|
|
|
|
description="资源类型",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
]
|
|
|
|
|
|
|
2025-05-06 10:35:11 +00:00
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_request():
|
2025-08-13 02:09:42 +00:00
|
|
|
|
return UpdateTeamMemberItemPermissionSerializer(many=True)
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_response():
|
|
|
|
|
|
return NewAPIUserResourcePermissionResponse
|
2025-08-11 07:51:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ResourceUserPermissionResponse(serializers.Serializer):
|
|
|
|
|
|
id = serializers.CharField(required=True, label=_('user id'))
|
|
|
|
|
|
nick_name = serializers.CharField(required=True, allow_null=True, allow_blank=True, label=_('nick_name'))
|
|
|
|
|
|
username = serializers.CharField(required=True, allow_null=True, allow_blank=True, label=_('username'))
|
|
|
|
|
|
permission = serializers.CharField(required=True, label=_('permission'))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class APIResourceUserPermissionResponse(ResultSerializer):
|
|
|
|
|
|
def get_data(self):
|
|
|
|
|
|
return ResourceUserPermissionResponse(many=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ResourceUserPermissionAPI(APIMixin):
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_parameters():
|
|
|
|
|
|
return [
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="workspace_id",
|
|
|
|
|
|
description="工作空间id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="target",
|
|
|
|
|
|
description="资源id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="resource",
|
|
|
|
|
|
description="资源类型",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="username",
|
|
|
|
|
|
description="用户名",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='query',
|
|
|
|
|
|
required=False
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="nick_name",
|
|
|
|
|
|
description="姓名",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='query',
|
|
|
|
|
|
required=False
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="permission",
|
|
|
|
|
|
description="权限",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='query',
|
2025-08-14 08:08:36 +00:00
|
|
|
|
many=True,
|
2025-08-11 07:51:34 +00:00
|
|
|
|
required=False
|
|
|
|
|
|
),
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_response():
|
|
|
|
|
|
return APIResourceUserPermissionResponse
|
|
|
|
|
|
|
2025-08-13 02:09:42 +00:00
|
|
|
|
class UserResourcePermissionPageAPI(APIMixin):
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_parameters():
|
|
|
|
|
|
return [
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="workspace_id",
|
|
|
|
|
|
description="工作空间id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="user_id",
|
|
|
|
|
|
description="用户id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="resource",
|
|
|
|
|
|
description="资源类型",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="current_page",
|
|
|
|
|
|
description=_("Current page"),
|
|
|
|
|
|
type=OpenApiTypes.INT,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True,
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="page_size",
|
|
|
|
|
|
description=_("Page size"),
|
|
|
|
|
|
type=OpenApiTypes.INT,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True,
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="name",
|
|
|
|
|
|
description="资源名称",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='query',
|
|
|
|
|
|
required=False
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="permission",
|
|
|
|
|
|
description="权限",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='query',
|
2025-08-14 08:08:36 +00:00
|
|
|
|
many=True,
|
2025-08-13 02:09:42 +00:00
|
|
|
|
required=False
|
|
|
|
|
|
),
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_response():
|
|
|
|
|
|
return NewAPIUserResourcePermissionPageResponse
|
|
|
|
|
|
|
2025-08-11 07:51:34 +00:00
|
|
|
|
|
|
|
|
|
|
class APIResourceUserPermissionPageResponse(ResultPageSerializer):
|
|
|
|
|
|
def get_data(self):
|
2025-08-13 02:09:42 +00:00
|
|
|
|
return PageDataResponse(ResourceUserPermissionResponse(many=True))
|
2025-08-11 07:51:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ResourceUserPermissionPageAPI(APIMixin):
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_parameters():
|
|
|
|
|
|
return [
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="workspace_id",
|
|
|
|
|
|
description="工作空间id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="target",
|
|
|
|
|
|
description="资源id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="resource",
|
|
|
|
|
|
description="资源类型",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="current_page",
|
|
|
|
|
|
description=_("Current page"),
|
|
|
|
|
|
type=OpenApiTypes.INT,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True,
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="page_size",
|
|
|
|
|
|
description=_("Page size"),
|
|
|
|
|
|
type=OpenApiTypes.INT,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True,
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="username",
|
|
|
|
|
|
description="用户名",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='query',
|
|
|
|
|
|
required=False
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="nick_name",
|
|
|
|
|
|
description="姓名",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='query',
|
|
|
|
|
|
required=False
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="permission",
|
|
|
|
|
|
description="权限",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='query',
|
2025-08-14 08:08:36 +00:00
|
|
|
|
many=True,
|
2025-08-11 07:51:34 +00:00
|
|
|
|
required=False
|
|
|
|
|
|
),
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_response():
|
|
|
|
|
|
return APIResourceUserPermissionPageResponse
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ResourceUserPermissionEditAPI(APIMixin):
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_parameters():
|
|
|
|
|
|
return [
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="workspace_id",
|
|
|
|
|
|
description="工作空间id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="target",
|
|
|
|
|
|
description="资源id",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
OpenApiParameter(
|
|
|
|
|
|
name="resource",
|
|
|
|
|
|
description="资源类型",
|
|
|
|
|
|
type=OpenApiTypes.STR,
|
|
|
|
|
|
location='path',
|
|
|
|
|
|
required=True
|
|
|
|
|
|
),
|
|
|
|
|
|
]
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_request():
|
|
|
|
|
|
return ResourceUserPermissionEditRequest(required=True, many=True, label=_('users_permission'))
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
|
def get_response():
|
|
|
|
|
|
return APIResourceUserPermissionResponse()
|