role.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from flask import Blueprint
  2. from public import db
  3. from apps.account.models import Role, User, RolePermissionRel, Permission
  4. from libs.tools import json_response, JsonParser, Argument
  5. from libs.decorators import require_permission
  6. blueprint = Blueprint(__name__, __name__)
  7. @blueprint.route('/', methods=['GET'])
  8. @require_permission('account_role_view|account_user_view')
  9. def get():
  10. roles = Role.query.all()
  11. return json_response(roles)
  12. @blueprint.route('/', methods=['POST'])
  13. @require_permission('account_role_add')
  14. def post():
  15. form, error = JsonParser('name', 'desc').parse()
  16. if error is None:
  17. Role(**form).save()
  18. return json_response(message=error)
  19. @blueprint.route('/<int:role_id>', methods=['PUT'])
  20. @require_permission('account_role_edit')
  21. def put(role_id):
  22. form, error = JsonParser('name', 'desc').parse()
  23. if error is None:
  24. role = Role.query.get_or_404(role_id)
  25. role.update(**form)
  26. return json_response(message=error)
  27. @blueprint.route('/<int:role_id>', methods=['DELETE'])
  28. @require_permission('account_role_del')
  29. def delete(role_id):
  30. user = User.query.filter_by(role_id=role_id).first()
  31. if user:
  32. return json_response(message='用户 <%s(%s)> 正在使用该角色,请更换该用户的角色后再尝试删除!' % (user.username, user.nickname))
  33. Role.query.get_or_404(role_id).delete()
  34. return json_response()
  35. @blueprint.route('/<int:role_id>/permissions', methods=['GET'])
  36. @require_permission('account_role_permission_view')
  37. def get_permission(role_id):
  38. result = {}
  39. has_permissions = Role.get_permissions(role_id)
  40. for item in Permission.query.all():
  41. item = item.to_json()
  42. item.update(is_has=item['name'] in has_permissions)
  43. result[item.pop('name')] = item
  44. return json_response(result)
  45. @blueprint.route('/<int:role_id>/permissions', methods=['POST'])
  46. @require_permission('account_role_permission_edit')
  47. def edit_permission(role_id):
  48. form, error = JsonParser(Argument('codes', type=list)).parse()
  49. if error is None:
  50. old_relationships = RolePermissionRel.query.filter_by(role_id=role_id).all()[:]
  51. for item in form.codes:
  52. rel = RolePermissionRel(role_id=role_id, permission_id=item)
  53. if rel in old_relationships:
  54. old_relationships.remove(rel)
  55. else:
  56. rel.add()
  57. for old_rel in old_relationships:
  58. old_rel.delete(commit=False)
  59. db.session.commit()
  60. return json_response(message=error)
  61. @blueprint.route('/<int:role_id>/permissions/publish', methods=['POST'])
  62. @require_permission('account_role_permission_edit')
  63. def publish_permission(role_id):
  64. form, error = JsonParser(Argument('app_ids', type=list), Argument('env_ids', type=list)).parse()
  65. if error is None:
  66. str_app_ids = [str(x) for x in form.app_ids]
  67. str_env_ids = [str(x) for x in form.env_ids]
  68. role = Role.query.get_or_404(role_id)
  69. role.update(app_ids=','.join(str_app_ids), env_ids=','.join(str_env_ids))
  70. return json_response(message=error)