user.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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. def do_logout():
  60. record_login_history(0)
  61. logout_user()
  62. return jsonify({'success': True})
  63. @base.route('/login', methods=['POST'])
  64. def do_login():
  65. #检查用户名是否存在
  66. user = User.query.filter_by(LOGINNAME=request.json['username']).first()
  67. if user is not None:
  68. md = hashlib.md5()
  69. #提交的密码MD5加密
  70. md.update(request.json['password'].encode('utf-8'))
  71. #MD5加密后的内容同数据库密码比较
  72. if md.hexdigest() == user.PWD:
  73. login_user(user)
  74. record_login_history(1)
  75. return jsonify({'name': '登录成功~', 'status': '1', 'url': '/'})
  76. return jsonify({'name': '登录失败,账号密码错误~', 'status': '0'})
  77. @base.route('/securityJsp/base/Syuser.jsp', methods=['GET'])
  78. def index_user():
  79. return render_template('user/index.html')
  80. @base.route('/base/syuser!grid.action', methods=['POST'])
  81. def user_grid():
  82. filters = []
  83. if request.form.get('loginname'):
  84. filters.append(User.LOGINNAME.like('%' + request.form.get('loginname') + '%'))
  85. if request.form.get('name'):
  86. filters.append(User.NAME.like('%' + request.form.get('name') + '%'))
  87. if request.form.get('sex'):
  88. filters.append(User.SEX == request.form.get('sex'))
  89. if request.form.get('createdatetime1') and request.form.get('createdatetime2'):
  90. filters.append(User.CREATEDATETIME > request.form.get('createdatetime1'))
  91. filters.append(User.CREATEDATETIME < request.form.get('createdatetime2'))
  92. order_by = []
  93. if request.form.get('sort'):
  94. if request.form.get('order') == 'asc':
  95. order_by.append(asc(getattr(User,request.form.get('sort').upper())))
  96. elif request.form.get('order') == 'desc':
  97. order_by.append(desc(getattr(User,request.form.get('sort').upper())))
  98. else:
  99. order_by.append(getattr(User,request.form.get('sort').upper()))
  100. page = request.form.get('page', 1, type=int)
  101. rows = request.form.get('rows', 10, type=int)
  102. pagination = User.query.filter(*filters).order_by(*order_by).paginate(
  103. page, per_page=rows, error_out=False)
  104. users = pagination.items
  105. return jsonify({'rows': [user.to_json() for user in users], 'total': pagination.total})
  106. @base.route('/base/syuser!getById.action', methods=['POST'])
  107. def syuser_getById():
  108. user = User.query.get(request.form.get('id'))
  109. if user:
  110. return jsonify(user.to_json())
  111. else:
  112. return jsonify({'success': False, 'msg': 'error'})
  113. @base.route('/base/syuser!update.action', methods=['POST'])
  114. def syuser_update():
  115. id = request.form.get('data.id')
  116. loginname = request.form.get('data.loginname')
  117. if User.query.filter(User.LOGINNAME == loginname).filter(User.ID != id).first():
  118. return jsonify({'success': False, 'msg': '更新用户失败,用户名已存在!'})
  119. user = User.query.get(id)
  120. user.UPDATEDATETIME = datetime.now()
  121. user.LOGINNAME = request.form.get('data.loginname')
  122. user.NAME = request.form.get('data.name')
  123. user.SEX = request.form.get('data.sex')
  124. user.PHOTO = request.form.get('data.photo')
  125. db.session.add(user)
  126. return jsonify({'success': True, 'msg': '更新成功!'})
  127. @base.route('/base/syuser!save.action', methods=['POST'])
  128. def syuser_save():
  129. if User.query.filter_by(LOGINNAME = request.form.get('data.loginname')).first():
  130. return jsonify({'success': False, 'msg': '新建用户失败,用户名已存在!'})
  131. user = User()
  132. user.ID = str(uuid.uuid4())
  133. md = hashlib.md5()
  134. md.update('123456'.encode('utf-8'))
  135. user.PWD = md.hexdigest()
  136. user.NAME = request.form.get('data.name')
  137. user.LOGINNAME = request.form.get('data.loginname')
  138. user.SEX = request.form.get('data.sex')
  139. user.PHOTO = request.form.get('data.photo')
  140. # add current use to new user
  141. #current_user.roles.append(user)
  142. db.session.add(user)
  143. return jsonify({'success': True, 'msg': '新建用户成功!默认密码:123456'})
  144. @base.route('/base/syuser!delete.action', methods=['POST'])
  145. def syuser_delete():
  146. user = User.query.get(request.form.get('id'))
  147. if user:
  148. db.session.delete(user)
  149. return jsonify({'success': True})
  150. @base.route('/base/syuser!doNotNeedSecurity_updateCurrentPwd.action', methods=['POST'])
  151. def syuser_update_pwd():
  152. user = User.query.get(current_user.ID)
  153. if user:
  154. md = hashlib.md5()
  155. md.update(request.form.get('data.pwd').encode('utf-8'))
  156. user.PWD = md.hexdigest()
  157. db.session.add(user)
  158. return jsonify({'success': True})
  159. @base.route('/securityJsp/userInfo.jsp', methods=['GET'])
  160. def syuser_info():
  161. resources = []
  162. resourceTree = []
  163. resources += [res for org in current_user.organizations for res in org.resources if org.resources]
  164. resources += [res for role in current_user.roles for res in role.resources if role.resources]
  165. # remove repeat
  166. new_dict = dict()
  167. for obj in resources:
  168. if obj.ID not in new_dict:
  169. new_dict[obj.ID] = obj
  170. for resource in new_dict.values():
  171. res = {}
  172. if resource.parent:
  173. res['pid'] = resource.parent.ID
  174. res['id'] = resource.ID
  175. res['text'] = resource.NAME
  176. res['iconCls'] = resource.ICONCLS
  177. resourceTree.append(res)
  178. return render_template('user/userinfo.html', current_user = current_user, resourceTreeJson = resourceTree)
  179. @base.route('/base/syuser!export.action', methods=['POST'])
  180. def user_export():
  181. rows = []
  182. rows.append(['登录名', '姓名', '创建时间', '修改时间', '性别'])
  183. users = User.query.all()
  184. for user in users:
  185. row = []
  186. row.append(user.LOGINNAME)
  187. row.append(user.NAME)
  188. row.append(user.CREATEDATETIME)
  189. row.append(user.UPDATEDATETIME)
  190. if user.SEX == '0':
  191. row.append('女')
  192. elif user.SEX == '1':
  193. row.append('男')
  194. rows.append(row)
  195. return excel.make_response_from_array(rows, "csv",
  196. file_name="user")