datasets_permissions.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from flask import jsonify, request
  2. from flask_login import current_user
  3. from flask_restful import Resource
  4. from werkzeug.exceptions import Forbidden, NotFound
  5. import services
  6. from controllers.console import api
  7. from controllers.console.wraps import (
  8. account_initialization_required,
  9. cloud_edition_billing_resource_check,
  10. setup_required,
  11. )
  12. from libs.login import login_required
  13. from services.dataset_service import DatasetService
  14. class DatasetPermissionListApi(Resource):
  15. @setup_required
  16. @login_required
  17. @account_initialization_required
  18. def get(self, dataset_id):
  19. dataset_id = str(dataset_id)
  20. dataset = DatasetService.get_dataset(dataset_id)
  21. if not dataset:
  22. raise NotFound("Dataset not found.")
  23. try:
  24. DatasetService.check_dataset_permission(dataset, current_user)
  25. except services.errors.account.NoPermissionError as e:
  26. raise Forbidden(str(e))
  27. edit_permission_list = DatasetService.get_datasets_edit_permission(dataset_id)
  28. read_permission_list = DatasetService.get_datasets_read_permission(dataset_id)
  29. response = {
  30. "edit_auth": dataset.edit_auth,
  31. "edit_permission": edit_permission_list,
  32. "read_permission": read_permission_list,
  33. }
  34. return response
  35. # 修改知识库编辑权限
  36. @setup_required
  37. @login_required
  38. @account_initialization_required
  39. @cloud_edition_billing_resource_check("vector_space")
  40. def post(self, dataset_id):
  41. dataset_id = str(dataset_id)
  42. dataset = DatasetService.get_dataset(dataset_id)
  43. if not dataset:
  44. raise NotFound("Dataset not found.")
  45. if not current_user.is_dataset_editor:
  46. raise Forbidden()
  47. #try:
  48. # 待完善部门领导权限判断
  49. # DatasetService.check_dataset_permission_new(dataset, current_user)
  50. # except services.errors.account.NoPermissionError as e:
  51. # raise Forbidden(str(e))
  52. # 解析表单数据
  53. data = request.get_json()
  54. if not data:
  55. raise NotFound("Invalid JSON")
  56. edit_auth = data.get("edit_auth")
  57. if edit_auth is None:
  58. return jsonify({"error": "Missing 'edit_auth' field"}), 400
  59. edit_permission_list = data.get("edit_permission")
  60. if edit_permission_list is None:
  61. return jsonify({"error": "Missing 'edit_permission' field"}), 400
  62. if not isinstance(edit_permission_list, list):
  63. return jsonify({"error": "'edit_permission' should be a list"}), 400
  64. read_permission_list = data.get("read_permission")
  65. if read_permission_list is None:
  66. return jsonify({"error": "Missing 'read_permission' field"}), 400
  67. if not isinstance(read_permission_list, list):
  68. return jsonify({"error": "'read_permission' should be a list"}), 400
  69. # 更新知识库的编辑权限
  70. DatasetService.update_dataset_edit_auth(dataset_id, edit_auth, current_user)
  71. # 更新知识库的编辑、可见授权
  72. DatasetService.update_dataset_edit_and_read_permission(
  73. dataset_id, current_user, edit_permission_list, read_permission_list
  74. )
  75. return {"result": "success"}, 204
  76. api.add_resource(DatasetPermissionListApi, "/datasets/<uuid:dataset_id>/permission")