role.py 7.2 KB

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