role.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. # coding:utf-8
  2. import imp
  3. from operator import or_
  4. from app.models.Organization import Organization
  5. from ..base import base
  6. from ..models import Role, Resource, User
  7. from flask import render_template, request
  8. from flask_login import current_user
  9. from flask import jsonify
  10. from datetime import datetime
  11. from .. import db
  12. import uuid
  13. from sqlalchemy import desc
  14. from sqlalchemy import asc
  15. from sqlalchemy import or_
  16. @base.route('/base/syrole!doNotNeedSecurity_getRolesTree.action', methods=['POST'])
  17. def get_roles_tree():
  18. roles = Role.query.join(User, Role.users).filter(User.ID == current_user.ID).all()
  19. return jsonify([role.to_json() for role in roles])
  20. @base.route('/base/syrole!doNotNeedSecurity_getRoleByUserId.action', methods=['POST'])
  21. def get_roles_by_userId():
  22. roles = Role.query.join(User, Role.users).filter(User.ID == request.form.get('id')).all()
  23. return jsonify([role.to_json() for role in roles])
  24. @base.route('/system/role/authUser/cancelAll', methods=['PUT'])
  25. def grant_role():
  26. roleId = request.args.get('roleId')
  27. userIds = request.args.get('userIds')
  28. role = Role.query.get(roleId)
  29. idList = userIds.split(',')
  30. toCancelUsers = [User.query.get(uid) for uid in idList]
  31. role.users = [user2 for user2 in role.users.all() for user in toCancelUsers if user2.ID != user.ID ]
  32. db.session.add(role)
  33. return jsonify({'code': 200, 'msg': '取消成功'})
  34. @base.route('/system/role/list', methods=['GET'])
  35. def grid():
  36. filters = []
  37. if request.args.get('roleName'):
  38. filters.append(Role.NAME.like('%' + request.args.get('roleName') + '%'))
  39. order_by = []
  40. if request.form.get('sort'):
  41. if request.form.get('order') == 'asc':
  42. order_by.append(asc(getattr(Role,request.form.get('sort').upper())))
  43. elif request.form.get('order') == 'desc':
  44. order_by.append(desc(getattr(Role,request.form.get('sort').upper())))
  45. else:
  46. order_by.append(getattr(Role,request.form.get('sort').upper()))
  47. page = request.args.get('pageNum', 1, type=int)
  48. rows = request.args.get('pageSize', 10, type=int)
  49. pagination = current_user.roles.filter(*filters).order_by(*order_by).paginate(
  50. page, per_page=rows, error_out=False)
  51. roles = pagination.items
  52. return jsonify({'rows': [role.to_json() for role in roles], 'total': pagination.total})
  53. @base.route('/system/role/<string:id>', methods=['GET'])
  54. def syrole_getById(id):
  55. role = Role.query.get(id)
  56. if role:
  57. return jsonify({'code': 200, 'msg': '操作成功', 'data': role.to_json()})
  58. else:
  59. return jsonify({'success': False, 'msg': 'error'})
  60. @base.route('/system/role', methods=['PUT'])
  61. def syrole_update():
  62. role = Role.query.get(request.json['roleId'])
  63. role.UPDATEDATETIME = datetime.now()
  64. role.NAME = request.json['roleName']
  65. role.DESCRIPTION = request.json['remark']
  66. role.SEQ = request.json['roleSort']
  67. if 'roleKey' in request.json: role.ROLEKEY = request.json['roleKey']
  68. if 'dataScope' in request.json: role.DATASCOPE = request.json['dataScope']
  69. if 'menuIds' in request.json:
  70. res_list = [Resource.query.get(menuId) for menuId in request.json['menuIds']]
  71. role.resources = res_list
  72. db.session.add(role)
  73. return jsonify({'code': 200, 'msg': '操作成功'})
  74. @base.route('/system/role', methods=['POST'])
  75. def syrole_save():
  76. role = Role()
  77. role.ID = str(uuid.uuid4())
  78. role.NAME = request.json['roleName']
  79. if 'roleKey' in request.json: role.ROLEKEY = request.json['roleKey']
  80. if 'remark' in request.json: role.DESCRIPTION = request.json['remark']
  81. role.SEQ = request.json['roleSort']
  82. if 'dataScope' in request.json: role.DATASCOPE = request.json['dataScope']
  83. if 'menuIds' in request.json:
  84. res_list = [Resource.query.get(menuId) for menuId in request.json['menuIds']]
  85. role.resources = res_list
  86. # add current use to new role
  87. current_user.roles.append(role)
  88. db.session.add(role)
  89. return jsonify({'code': 200, 'msg': '操作成功'})
  90. @base.route('/system/role/<string:id>', methods=['DELETE'])
  91. def syrole_delete(id):
  92. role = Role.query.get(id)
  93. if role:
  94. db.session.delete(role)
  95. return jsonify({'code': 200, 'msg': '操作成功'})
  96. @base.route('/system/role/authUser/allocatedList', methods=['GET'])
  97. def allocatedList():
  98. page = request.args.get('pageNum', 1, type=int)
  99. rows = request.args.get('pageSize', 10, type=int)
  100. pagination = User.query.join(Role, User.roles).filter(Role.ID == request.args['roleId']).paginate(
  101. page, per_page=rows, error_out=False)
  102. users = pagination.items
  103. return jsonify({'rows': [user.to_json() for user in users], 'total': pagination.total})
  104. @base.route('/system/role/authUser/unallocatedList', methods=['GET'])
  105. def unallocatedList():
  106. page = request.args.get('pageNum', 1, type=int)
  107. rows = request.args.get('pageNum', 10, type=int)
  108. pagination = User.query.join(Role, User.roles).filter(or_(Role.ID != request.args['roleId'], Role.ID == None)).paginate(
  109. page, per_page=rows, error_out=False)
  110. users = pagination.items
  111. return jsonify({'rows': [user.to_json() for user in users], 'total': pagination.total})
  112. @base.route('/system/dept/roleDeptTreeselect/<id>', methods=['GET'])
  113. def roleDeptTreeselect(id):
  114. role = Role.query.get(id)
  115. dept = Organization.query.get('0')
  116. return jsonify({'code': 200, 'msg': '操作成功', 'checkedKeys': [dept.ID for dept in role.depts], \
  117. 'depts': [dept.to_tree_select_json()]})
  118. @base.route('/system/role/dataScope', methods=['PUT'])
  119. def syrole_dataScope():
  120. role = Role.query.get(request.json['roleId'])
  121. if 'dataScope' in request.json: role.DATASCOPE = request.json['dataScope']
  122. if 'deptIds' in request.json:
  123. dept_list = [Organization.query.get(deptId) for deptId in request.json['deptIds']]
  124. role.depts = dept_list
  125. db.session.add(role)
  126. return jsonify({'code': 200, 'msg': '操作成功'})