user_resource_permission.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  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. from rest_framework import serializers
  12. from django.utils.translation import gettext_lazy as _
  13. from common.mixins.api_mixin import APIMixin
  14. from common.result import ResultSerializer, ResultPageSerializer, PageDataResponse
  15. from system_manage.serializers.user_resource_permission import ResourceUserPermissionEditRequest, UpdateTeamMemberItemPermissionSerializer
  16. class UserResourcePermissionResponse0(serializers.Serializer):
  17. id = serializers.UUIDField(required=True, label="主键id")
  18. name = serializers.CharField(required=True, label="资源名称")
  19. auth_target_type = serializers.CharField(required=True, label="授权资源")
  20. user_id = serializers.UUIDField(required=True, label="用户id")
  21. icon = serializers.CharField(required=True, label="资源图标")
  22. auth_type = serializers.CharField(required=True, label="授权类型")
  23. permission = serializers.ChoiceField(required=False, allow_null=True, allow_blank=True,
  24. choices=['NOT_AUTH', 'MANAGE', 'VIEW', 'ROLE'],
  25. label=_('permission'))
  26. class NewAPIUserResourcePermissionResponse(ResultSerializer):
  27. def get_data(self):
  28. return UserResourcePermissionResponse0(many=True)
  29. class NewAPIUserResourcePermissionPageResponse(ResultPageSerializer):
  30. def get_data(self):
  31. return UserResourcePermissionResponse0(many=True)
  32. class UserResourcePermissionAPI(APIMixin):
  33. @staticmethod
  34. def get_parameters():
  35. return [
  36. OpenApiParameter(
  37. name="workspace_id",
  38. description="工作空间id",
  39. type=OpenApiTypes.STR,
  40. location='path',
  41. required=True,
  42. ),
  43. OpenApiParameter(
  44. name="user_id",
  45. description="用户id",
  46. type=OpenApiTypes.STR,
  47. location='path',
  48. required=True,
  49. ),
  50. OpenApiParameter(
  51. name="name",
  52. description="名称",
  53. type=OpenApiTypes.STR,
  54. location='query',
  55. required=False
  56. ),
  57. OpenApiParameter(
  58. name="permission",
  59. description="权限",
  60. type=OpenApiTypes.STR,
  61. location='query',
  62. many=True,
  63. required=False
  64. ),
  65. ]
  66. @staticmethod
  67. def get_response():
  68. return NewAPIUserResourcePermissionResponse
  69. class EditUserResourcePermissionAPI(APIMixin):
  70. @staticmethod
  71. def get_parameters():
  72. return [
  73. OpenApiParameter(
  74. name="workspace_id",
  75. description="工作空间id",
  76. type=OpenApiTypes.STR,
  77. location='path',
  78. required=True,
  79. ),
  80. OpenApiParameter(
  81. name="user_id",
  82. description="用户id",
  83. type=OpenApiTypes.STR,
  84. location='path',
  85. required=True,
  86. ),
  87. OpenApiParameter(
  88. name="resource",
  89. description="资源类型",
  90. type=OpenApiTypes.STR,
  91. location='path',
  92. required=True
  93. ),
  94. ]
  95. @staticmethod
  96. def get_request():
  97. return UpdateTeamMemberItemPermissionSerializer(many=True)
  98. @staticmethod
  99. def get_response():
  100. return NewAPIUserResourcePermissionResponse
  101. class ResourceUserPermissionResponse(serializers.Serializer):
  102. id = serializers.CharField(required=True, label=_('user id'))
  103. nick_name = serializers.CharField(required=True, allow_null=True, allow_blank=True, label=_('nick_name'))
  104. username = serializers.CharField(required=True, allow_null=True, allow_blank=True, label=_('username'))
  105. permission = serializers.CharField(required=True, label=_('permission'))
  106. class APIResourceUserPermissionResponse(ResultSerializer):
  107. def get_data(self):
  108. return ResourceUserPermissionResponse(many=True)
  109. class ResourceUserPermissionAPI(APIMixin):
  110. @staticmethod
  111. def get_parameters():
  112. return [
  113. OpenApiParameter(
  114. name="workspace_id",
  115. description="工作空间id",
  116. type=OpenApiTypes.STR,
  117. location='path',
  118. required=True
  119. ),
  120. OpenApiParameter(
  121. name="target",
  122. description="资源id",
  123. type=OpenApiTypes.STR,
  124. location='path',
  125. required=True
  126. ),
  127. OpenApiParameter(
  128. name="resource",
  129. description="资源类型",
  130. type=OpenApiTypes.STR,
  131. location='path',
  132. required=True
  133. ),
  134. OpenApiParameter(
  135. name="username",
  136. description="用户名",
  137. type=OpenApiTypes.STR,
  138. location='query',
  139. required=False
  140. ),
  141. OpenApiParameter(
  142. name="nick_name",
  143. description="姓名",
  144. type=OpenApiTypes.STR,
  145. location='query',
  146. required=False
  147. ),
  148. OpenApiParameter(
  149. name="permission",
  150. description="权限",
  151. type=OpenApiTypes.STR,
  152. location='query',
  153. many=True,
  154. required=False
  155. ),
  156. ]
  157. @staticmethod
  158. def get_response():
  159. return APIResourceUserPermissionResponse
  160. class UserResourcePermissionPageAPI(APIMixin):
  161. @staticmethod
  162. def get_parameters():
  163. return [
  164. OpenApiParameter(
  165. name="workspace_id",
  166. description="工作空间id",
  167. type=OpenApiTypes.STR,
  168. location='path',
  169. required=True
  170. ),
  171. OpenApiParameter(
  172. name="user_id",
  173. description="用户id",
  174. type=OpenApiTypes.STR,
  175. location='path',
  176. required=True
  177. ),
  178. OpenApiParameter(
  179. name="resource",
  180. description="资源类型",
  181. type=OpenApiTypes.STR,
  182. location='path',
  183. required=True
  184. ),
  185. OpenApiParameter(
  186. name="current_page",
  187. description=_("Current page"),
  188. type=OpenApiTypes.INT,
  189. location='path',
  190. required=True,
  191. ),
  192. OpenApiParameter(
  193. name="page_size",
  194. description=_("Page size"),
  195. type=OpenApiTypes.INT,
  196. location='path',
  197. required=True,
  198. ),
  199. OpenApiParameter(
  200. name="name",
  201. description="资源名称",
  202. type=OpenApiTypes.STR,
  203. location='query',
  204. required=False
  205. ),
  206. OpenApiParameter(
  207. name="permission[]",
  208. description="权限",
  209. type=OpenApiTypes.STR,
  210. location='query',
  211. many=True,
  212. required=False
  213. ),
  214. ]
  215. @staticmethod
  216. def get_response():
  217. return NewAPIUserResourcePermissionPageResponse
  218. class APIResourceUserPermissionPageResponse(ResultPageSerializer):
  219. def get_data(self):
  220. return PageDataResponse(ResourceUserPermissionResponse(many=True))
  221. class ResourceUserPermissionPageAPI(APIMixin):
  222. @staticmethod
  223. def get_parameters():
  224. return [
  225. OpenApiParameter(
  226. name="workspace_id",
  227. description="工作空间id",
  228. type=OpenApiTypes.STR,
  229. location='path',
  230. required=True
  231. ),
  232. OpenApiParameter(
  233. name="target",
  234. description="资源id",
  235. type=OpenApiTypes.STR,
  236. location='path',
  237. required=True
  238. ),
  239. OpenApiParameter(
  240. name="resource",
  241. description="资源类型",
  242. type=OpenApiTypes.STR,
  243. location='path',
  244. required=True
  245. ),
  246. OpenApiParameter(
  247. name="current_page",
  248. description=_("Current page"),
  249. type=OpenApiTypes.INT,
  250. location='path',
  251. required=True,
  252. ),
  253. OpenApiParameter(
  254. name="page_size",
  255. description=_("Page size"),
  256. type=OpenApiTypes.INT,
  257. location='path',
  258. required=True,
  259. ),
  260. OpenApiParameter(
  261. name="username",
  262. description="用户名",
  263. type=OpenApiTypes.STR,
  264. location='query',
  265. required=False
  266. ),
  267. OpenApiParameter(
  268. name="nick_name",
  269. description="姓名",
  270. type=OpenApiTypes.STR,
  271. location='query',
  272. required=False
  273. ),
  274. OpenApiParameter(
  275. name="permission[]",
  276. description="权限",
  277. type=OpenApiTypes.STR,
  278. location='query',
  279. many=True,
  280. required=False
  281. ),
  282. ]
  283. @staticmethod
  284. def get_response():
  285. return APIResourceUserPermissionPageResponse
  286. class ResourceUserPermissionEditAPI(APIMixin):
  287. @staticmethod
  288. def get_parameters():
  289. return [
  290. OpenApiParameter(
  291. name="workspace_id",
  292. description="工作空间id",
  293. type=OpenApiTypes.STR,
  294. location='path',
  295. required=True
  296. ),
  297. OpenApiParameter(
  298. name="target",
  299. description="资源id",
  300. type=OpenApiTypes.STR,
  301. location='path',
  302. required=True
  303. ),
  304. OpenApiParameter(
  305. name="resource",
  306. description="资源类型",
  307. type=OpenApiTypes.STR,
  308. location='path',
  309. required=True
  310. ),
  311. ]
  312. @staticmethod
  313. def get_request():
  314. return ResourceUserPermissionEditRequest(required=True, many=True, label=_('users_permission'))
  315. @staticmethod
  316. def get_response():
  317. return APIResourceUserPermissionResponse()