role.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # coding:utf-8
  2. from ..base import base
  3. from ..models import Role, Resource, User
  4. from flask import render_template, request
  5. from flask_login import current_user
  6. from flask import jsonify
  7. from datetime import datetime
  8. from .. import db
  9. import uuid
  10. from sqlalchemy import desc
  11. from sqlalchemy import asc
  12. @base.route('/securityJsp/base/Syrole.jsp', methods=['GET'])
  13. def index_role():
  14. return render_template('role/index.html')
  15. @base.route('/securityJsp/base/SyroleForm.jsp', methods=['GET'])
  16. def form_role():
  17. return render_template('role/form.html', id=request.args.get('id', ''))
  18. @base.route('/securityJsp/base/SyroleGrant.jsp', methods=['GET'])
  19. def grant_role_page():
  20. return render_template('role/grant.html', id=request.args.get('id', ''))
  21. @base.route('/base/syrole!doNotNeedSecurity_getRolesTree.action', methods=['POST'])
  22. def get_roles_tree():
  23. roles = Role.query.join(User, Role.users).filter(User.ID == current_user.ID).all()
  24. return jsonify([role.to_json() for role in roles])
  25. @base.route('/base/syrole!doNotNeedSecurity_getRoleByUserId.action', methods=['POST'])
  26. def get_roles_by_userId():
  27. roles = Role.query.join(User, Role.users).filter(User.ID == request.form.get('id')).all()
  28. return jsonify([role.to_json() for role in roles])
  29. @base.route('/base/syrole!grant.action', methods=['POST'])
  30. def grant_role():
  31. id = request.form.get('id')
  32. ids = request.form.get('ids')
  33. role = Role.query.get(id)
  34. if not ids: #授权资源为空
  35. role.resources = []
  36. else: #授权资源访问,资源之间以逗号分割
  37. idList = ids.split(',')
  38. role.resources = [Resource.query.get(rid) for rid in idList]
  39. db.session.add(role)
  40. return jsonify({'success': True})
  41. @base.route('/system/role/list', methods=['GET'])
  42. def grid():
  43. filters = []
  44. if request.form.get('name'):
  45. filters.append(Role.NAME.like('%' + request.form.get('name') + '%'))
  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.form.get('page', 1, type=int)
  55. rows = request.form.get('rows', 10, type=int)
  56. pagination = current_user.roles.filter(*filters).order_by(*order_by).paginate(
  57. 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. def syrole_getById(id):
  62. role = Role.query.get(id)
  63. if role:
  64. return jsonify({'code': 200, 'msg': '操作成功', 'data': role.to_json()})
  65. else:
  66. return jsonify({'success': False, 'msg': 'error'})
  67. @base.route('/system/role', methods=['PUT'])
  68. def syrole_update():
  69. role = Role.query.get(request.json['roleId'])
  70. role.UPDATEDATETIME = datetime.now()
  71. role.NAME = request.json['roleName']
  72. role.DESCRIPTION = request.json['remark']
  73. role.SEQ = request.json['roleSort']
  74. db.session.add(role)
  75. return jsonify({'success': True})
  76. @base.route('/system/role', methods=['POST'])
  77. def syrole_save():
  78. role = Role()
  79. role.ID = str(uuid.uuid4())
  80. role.NAME = request.json['roleName']
  81. role.DESCRIPTION = request.json['remark']
  82. role.SEQ = request.json['roleSort']
  83. # add current use to new role
  84. current_user.roles.append(role)
  85. db.session.add(role)
  86. return jsonify({'success': True})
  87. @base.route('/system/role/<string:id>', methods=['DELETE'])
  88. def syrole_delete(id):
  89. role = Role.query.get(id)
  90. if role:
  91. db.session.delete(role)
  92. return jsonify({'success': True})