user.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. # coding:utf-8
  2. from ..base import base
  3. from ..models import User, Organization, Role, OnLine
  4. from flask import render_template, request
  5. from flask import g, jsonify
  6. import hashlib
  7. from flask_login import login_user, logout_user, login_required, \
  8. current_user
  9. from datetime import datetime
  10. from .. import db
  11. import uuid
  12. from sqlalchemy import asc
  13. from sqlalchemy import desc
  14. import flask_excel as excel
  15. @base.route('/login', methods=['GET'])
  16. def login():
  17. return render_template('login/index.html')
  18. @base.route('/securityJsp/base/SyuserForm.jsp', methods=['GET'])
  19. def form_user():
  20. return render_template('user/form.html', id=request.args.get('id', ''))
  21. @base.route('/securityJsp/base/SyuserOrganizationGrant.jsp', methods=['GET'])
  22. def grant_user_organization_page():
  23. return render_template('user/grant_organization.html', id=request.args.get('id', ''))
  24. @base.route('/securityJsp/base/SyuserRoleGrant.jsp', methods=['GET'])
  25. def grant_user_role_page():
  26. return render_template('user/grant_role.html', id=request.args.get('id', ''))
  27. @base.route('/base/syuser!grantOrganization.action', methods=['POST'])
  28. def grant_user_organization():
  29. id = request.form.get('id')
  30. ids = request.form.get('ids')
  31. user = User.query.get(id)
  32. if not ids:
  33. user.organizations = []
  34. else:
  35. idList = ids.split(',')
  36. user.organizations = [Organization.query.get(rid) for rid in idList]
  37. db.session.add(user)
  38. return jsonify({'success': True})
  39. @base.route('/base/syuser!grantRole.action', methods=['POST'])
  40. def grant_user_role():
  41. id = request.form.get('id')
  42. ids = request.form.get('ids')
  43. user = User.query.get(id)
  44. if not ids:
  45. user.roles = []
  46. else:
  47. idList = ids.split(',')
  48. user.roles = [Role.query.get(rid) for rid in idList]
  49. db.session.add(user)
  50. return jsonify({'success': True})
  51. def record_login_history(type):
  52. online = OnLine()
  53. online.ID = str(uuid.uuid4())
  54. online.LOGINNAME = current_user.LOGINNAME
  55. online.IP = request.remote_addr
  56. online.TYPE = type
  57. db.session.add(online)
  58. @base.route('/logout', methods=['POST'])
  59. @login_required
  60. def do_logout():
  61. record_login_history(0)
  62. logout_user()
  63. return jsonify({'success': True})
  64. @base.route('/login', methods=['POST'])
  65. def do_login():
  66. #检查用户名是否存在
  67. user = User.query.filter_by(LOGINNAME=request.json['username']).first()
  68. if user is not None:
  69. md = hashlib.md5()
  70. #提交的密码MD5加密
  71. md.update(request.json['password'].encode('utf-8'))
  72. #MD5加密后的内容同数据库密码比较
  73. if md.hexdigest() == user.PWD:
  74. login_user(user)
  75. record_login_history(1)
  76. return jsonify({'msg': '登录成功~', 'code': 200, 'url': '/', 'token': str(uuid.uuid4())})
  77. return jsonify({'msg': '登录失败,账号密码错误~', 'code': 500})
  78. @base.route('/securityJsp/base/Syuser.jsp', methods=['GET'])
  79. def index_user():
  80. return render_template('user/index.html')
  81. @base.route('/system/user/list', methods=['GET'])
  82. def user_grid():
  83. filters = []
  84. if request.form.get('loginname'):
  85. filters.append(User.LOGINNAME.like('%' + request.form.get('loginname') + '%'))
  86. if request.form.get('name'):
  87. filters.append(User.NAME.like('%' + request.form.get('name') + '%'))
  88. if request.form.get('sex'):
  89. filters.append(User.SEX == request.form.get('sex'))
  90. if request.form.get('createdatetime1') and request.form.get('createdatetime2'):
  91. filters.append(User.CREATEDATETIME > request.form.get('createdatetime1'))
  92. filters.append(User.CREATEDATETIME < request.form.get('createdatetime2'))
  93. order_by = []
  94. if request.form.get('sort'):
  95. if request.form.get('order') == 'asc':
  96. order_by.append(asc(getattr(User,request.form.get('sort').upper())))
  97. elif request.form.get('order') == 'desc':
  98. order_by.append(desc(getattr(User,request.form.get('sort').upper())))
  99. else:
  100. order_by.append(getattr(User,request.form.get('sort').upper()))
  101. page = request.form.get('page', 1, type=int)
  102. rows = request.form.get('rows', 10, type=int)
  103. pagination = User.query.filter(*filters).order_by(*order_by).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, 'code': 200, 'msg': '查询成功'})
  107. @base.route('/system/user/<id>', methods=['GET'])
  108. def syuser_getById(id):
  109. user = User.query.get(id)
  110. if user:
  111. json = {'code': 200, 'msg': '', 'data': user.to_json()}
  112. if len(user.roles.all()) > 0:
  113. json['roles'] = [role.to_json() for role in user.roles]
  114. json['roleIds'] = [role.ID for role in user.roles]
  115. return jsonify(json)
  116. else:
  117. return jsonify({'success': False, 'msg': 'error'})
  118. @base.route('/base/syuser!update.action', methods=['POST'])
  119. def syuser_update():
  120. id = request.form.get('data.id')
  121. loginname = request.form.get('data.loginname')
  122. if User.query.filter(User.LOGINNAME == loginname).filter(User.ID != id).first():
  123. return jsonify({'success': False, 'msg': '更新用户失败,用户名已存在!'})
  124. user = User.query.get(id)
  125. user.UPDATEDATETIME = datetime.now()
  126. user.LOGINNAME = request.form.get('data.loginname')
  127. user.NAME = request.form.get('data.name')
  128. user.SEX = request.form.get('data.sex')
  129. user.PHOTO = request.form.get('data.photo')
  130. db.session.add(user)
  131. return jsonify({'success': True, 'msg': '更新成功!'})
  132. @base.route('/base/syuser!save.action', methods=['POST'])
  133. def syuser_save():
  134. if User.query.filter_by(LOGINNAME = request.form.get('data.loginname')).first():
  135. return jsonify({'success': False, 'msg': '新建用户失败,用户名已存在!'})
  136. user = User()
  137. user.ID = str(uuid.uuid4())
  138. md = hashlib.md5()
  139. md.update('123456'.encode('utf-8'))
  140. user.PWD = md.hexdigest()
  141. user.NAME = request.form.get('data.name')
  142. user.LOGINNAME = request.form.get('data.loginname')
  143. user.SEX = request.form.get('data.sex')
  144. user.PHOTO = request.form.get('data.photo')
  145. # add current use to new user
  146. #current_user.roles.append(user)
  147. db.session.add(user)
  148. return jsonify({'success': True, 'msg': '新建用户成功!默认密码:123456'})
  149. @base.route('/base/syuser!delete.action', methods=['POST'])
  150. def syuser_delete():
  151. user = User.query.get(request.form.get('id'))
  152. if user:
  153. db.session.delete(user)
  154. return jsonify({'success': True})
  155. @base.route('/base/syuser!doNotNeedSecurity_updateCurrentPwd.action', methods=['POST'])
  156. def syuser_update_pwd():
  157. user = User.query.get(current_user.ID)
  158. if user:
  159. md = hashlib.md5()
  160. md.update(request.form.get('data.pwd').encode('utf-8'))
  161. user.PWD = md.hexdigest()
  162. db.session.add(user)
  163. return jsonify({'success': True})
  164. @base.route('/getInfo', methods=['GET'])
  165. @login_required
  166. def syuser_info():
  167. resources = []
  168. resourceTree = []
  169. resources += [res for org in current_user.organizations for res in org.resources if org.resources]
  170. resources += [res for role in current_user.roles for res in role.resources if role.resources]
  171. # remove repeat
  172. new_dict = dict()
  173. for obj in resources:
  174. if obj.ID not in new_dict:
  175. new_dict[obj.ID] = obj
  176. for resource in new_dict.values():
  177. resourceTree.append(resource.PERMS)
  178. return jsonify({'msg': '登录成功~', 'code': 200, \
  179. 'user': {'userName': current_user.LOGINNAME, 'avatar': '', 'nickName': current_user.NAME, 'userId': current_user.ID}, \
  180. 'roles': [role.NAME for role in current_user.roles], 'permissions': resourceTree})
  181. @base.route('/base/syuser!export.action', methods=['POST'])
  182. def user_export():
  183. rows = []
  184. rows.append(['登录名', '姓名', '创建时间', '修改时间', '性别'])
  185. users = User.query.all()
  186. for user in users:
  187. row = []
  188. row.append(user.LOGINNAME)
  189. row.append(user.NAME)
  190. row.append(user.CREATEDATETIME)
  191. row.append(user.UPDATEDATETIME)
  192. if user.SEX == '0':
  193. row.append('女')
  194. elif user.SEX == '1':
  195. row.append('男')
  196. rows.append(row)
  197. return excel.make_response_from_array(rows, "csv",
  198. file_name="user")