role.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. # coding:utf-8
  2. import imp
  3. from operator import or_
  4. from ..base import base
  5. from ..models import Role, Resource, User
  6. from flask import render_template, request
  7. from flask_login import current_user
  8. from flask import jsonify
  9. from datetime import datetime
  10. from .. import db
  11. import uuid
  12. from sqlalchemy import desc
  13. from sqlalchemy import asc
  14. from sqlalchemy import or_
  15. @base.route('/securityJsp/base/Syrole.jsp', methods=['GET'])
  16. def index_role():
  17. return render_template('role/index.html')
  18. @base.route('/securityJsp/base/SyroleForm.jsp', methods=['GET'])
  19. def form_role():
  20. return render_template('role/form.html', id=request.args.get('id', ''))
  21. @base.route('/securityJsp/base/SyroleGrant.jsp', methods=['GET'])
  22. def grant_role_page():
  23. return render_template('role/grant.html', id=request.args.get('id', ''))
  24. @base.route('/base/syrole!doNotNeedSecurity_getRolesTree.action', methods=['POST'])
  25. def get_roles_tree():
  26. roles = Role.query.join(User, Role.users).filter(User.ID == current_user.ID).all()
  27. return jsonify([role.to_json() for role in roles])
  28. @base.route('/base/syrole!doNotNeedSecurity_getRoleByUserId.action', methods=['POST'])
  29. def get_roles_by_userId():
  30. roles = Role.query.join(User, Role.users).filter(User.ID == request.form.get('id')).all()
  31. return jsonify([role.to_json() for role in roles])
  32. @base.route('/base/syrole!grant.action', methods=['POST'])
  33. def grant_role():
  34. id = request.form.get('id')
  35. ids = request.form.get('ids')
  36. role = Role.query.get(id)
  37. if not ids: #授权资源为空
  38. role.resources = []
  39. else: #授权资源访问,资源之间以逗号分割
  40. idList = ids.split(',')
  41. role.resources = [Resource.query.get(rid) for rid in idList]
  42. db.session.add(role)
  43. return jsonify({'success': True})
  44. @base.route('/system/role/list', methods=['GET'])
  45. def grid():
  46. filters = []
  47. if request.form.get('name'):
  48. filters.append(Role.NAME.like('%' + request.form.get('name') + '%'))
  49. order_by = []
  50. if request.form.get('sort'):
  51. if request.form.get('order') == 'asc':
  52. order_by.append(asc(getattr(Role,request.form.get('sort').upper())))
  53. elif request.form.get('order') == 'desc':
  54. order_by.append(desc(getattr(Role,request.form.get('sort').upper())))
  55. else:
  56. order_by.append(getattr(Role,request.form.get('sort').upper()))
  57. page = request.form.get('page', 1, type=int)
  58. rows = request.form.get('rows', 10, type=int)
  59. pagination = current_user.roles.filter(*filters).order_by(*order_by).paginate(
  60. page, per_page=rows, error_out=False)
  61. roles = pagination.items
  62. return jsonify({'rows': [role.to_json() for role in roles], 'total': pagination.total})
  63. @base.route('/system/role/<string:id>', methods=['GET'])
  64. def syrole_getById(id):
  65. role = Role.query.get(id)
  66. if role:
  67. return jsonify({'code': 200, 'msg': '操作成功', 'data': role.to_json()})
  68. else:
  69. return jsonify({'success': False, 'msg': 'error'})
  70. @base.route('/system/role', methods=['PUT'])
  71. def syrole_update():
  72. role = Role.query.get(request.json['roleId'])
  73. role.UPDATEDATETIME = datetime.now()
  74. role.NAME = request.json['roleName']
  75. role.DESCRIPTION = request.json['remark']
  76. role.SEQ = request.json['roleSort']
  77. db.session.add(role)
  78. return jsonify({'code': 200})
  79. @base.route('/system/role', methods=['POST'])
  80. def syrole_save():
  81. role = Role()
  82. role.ID = str(uuid.uuid4())
  83. role.NAME = request.json['roleName']
  84. if 'remark' in request.json: role.DESCRIPTION = request.json['remark']
  85. role.SEQ = request.json['roleSort']
  86. if 'menuIds' in request.json:
  87. res_list = [Resource.query.get(menuId) for menuId in request.json['menuIds']]
  88. role.resources = res_list
  89. # add current use to new role
  90. current_user.roles.append(role)
  91. db.session.add(role)
  92. return jsonify({'code': 200})
  93. @base.route('/system/role/<string:id>', methods=['DELETE'])
  94. def syrole_delete(id):
  95. role = Role.query.get(id)
  96. if role:
  97. db.session.delete(role)
  98. return jsonify({'code': 200})
  99. @base.route('/system/role/authUser/allocatedList', methods=['GET'])
  100. def allocatedList():
  101. page = request.args.get('pageNum', 1, type=int)
  102. rows = request.args.get('pageSize', 10, type=int)
  103. pagination = User.query.join(Role, User.roles).filter(Role.ID == request.args['roleId']).paginate(
  104. page, per_page=rows, error_out=False)
  105. users = pagination.items
  106. return jsonify({'rows': [user.to_json() for user in users], 'total': pagination.total})
  107. @base.route('/system/role/authUser/unallocatedList', methods=['GET'])
  108. def unallocatedList():
  109. page = request.args.get('pageNum', 1, type=int)
  110. rows = request.args.get('pageNum', 10, type=int)
  111. pagination = User.query.join(Role, User.roles).filter(or_(Role.ID != request.args['roleId'], Role.ID == None)).paginate(
  112. page, per_page=rows, error_out=False)
  113. users = pagination.items
  114. return jsonify({'rows': [user.to_json() for user in users], 'total': pagination.total})