user.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  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, true
  13. from sqlalchemy import desc
  14. import flask_excel as excel
  15. from .. import permission
  16. @base.route('/system/user/authRole', methods=['PUT'])
  17. @login_required
  18. @permission('system:role:edit')
  19. def grant_user_role():
  20. id = request.args['userId']
  21. ids = request.args['roleIds']
  22. user = User.query.get(id)
  23. if not ids:
  24. user.roles = []
  25. else:
  26. idList = ids.split(',')
  27. user.roles = [Role.query.get(rid) for rid in idList]
  28. db.session.add(user)
  29. return jsonify({'code': 200, 'msg': '操作成功'})
  30. @login_required
  31. def record_login_history(type):
  32. online = OnLine()
  33. online.ID = str(uuid.uuid4())
  34. online.LOGINNAME = current_user.LOGINNAME
  35. online.IP = request.remote_addr
  36. online.TYPE = type
  37. db.session.add(online)
  38. @base.route('/logout', methods=['POST'])
  39. @login_required
  40. def do_logout():
  41. record_login_history(0)
  42. logout_user()
  43. return jsonify({'success': True})
  44. @base.route('/login', methods=['POST'])
  45. def do_login():
  46. #检查用户名是否存在
  47. user = User.query.filter_by(LOGINNAME=request.json['username']).first()
  48. if user is not None:
  49. md = hashlib.md5()
  50. #提交的密码MD5加密
  51. md.update(request.json['password'].encode('utf-8'))
  52. #MD5加密后的内容同数据库密码比较
  53. if md.hexdigest() == user.PWD:
  54. login_user(user)
  55. record_login_history(1)
  56. return jsonify({'msg': '登录成功~', 'code': 200, 'url': '/', 'token': str(uuid.uuid4())})
  57. return jsonify({'msg': '登录失败,账号密码错误~', 'code': 500})
  58. @base.route('/system/user/list', methods=['GET'])
  59. @login_required
  60. @permission('system:user:list')
  61. def user_grid():
  62. filters = []
  63. if 'userName' in request.args:
  64. filters.append(User.LOGINNAME.like('%' + request.args['userName'] + '%'))
  65. if 'phonenumber' in request.args:
  66. filters.append(User.PHONENUMBER.like('%' + request.args['phonenumber'] + '%'))
  67. if 'params[beginTime]' in request.args and 'params[endTime]' in request.args:
  68. filters.append(User.CREATEDATETIME > request.args['params[beginTime]'])
  69. filters.append(User.CREATEDATETIME < request.args['params[endTime]'])
  70. order_by = []
  71. if request.form.get('sort'):
  72. if request.form.get('order') == 'asc':
  73. order_by.append(asc(getattr(User,request.form.get('sort').upper())))
  74. elif request.form.get('order') == 'desc':
  75. order_by.append(desc(getattr(User,request.form.get('sort').upper())))
  76. else:
  77. order_by.append(getattr(User,request.form.get('sort').upper()))
  78. page = request.args.get('pageNum', 1, type=int)
  79. rows = request.args.get('pageSize', 10, type=int)
  80. pagination = User.query.filter(*filters).order_by(*order_by).paginate(
  81. page=page, per_page=rows, error_out=False)
  82. users = pagination.items
  83. return jsonify({'rows': [user.to_json() for user in users], 'total': pagination.total, 'code': 200, 'msg': '查询成功'})
  84. @base.route('/system/user/', methods=['GET'])
  85. @login_required
  86. def syuser_get():
  87. json = {'code': 200, 'msg': ''}
  88. json['roles'] = [role.to_json() for role in Role.query.all()]
  89. json['posts'] = []
  90. return jsonify(json)
  91. @base.route('/system/user/<id>', methods=['GET'])
  92. @login_required
  93. @permission('system:user:query')
  94. def syuser_getById(id):
  95. user = User.query.get(id)
  96. if user:
  97. json = {'code': 200, 'msg': '', 'data': user.to_json()}
  98. if len(user.roles.all()) > 0:
  99. json['roles'] = [role.to_json() for role in user.roles]
  100. json['roleIds'] = [role.ID for role in user.roles]
  101. return jsonify(json)
  102. else:
  103. return jsonify({'success': False, 'msg': 'error'})
  104. @base.route('/system/user', methods=['PUT'])
  105. @login_required
  106. @permission('system:user:edit')
  107. def syuser_update():
  108. id = request.json['userId']
  109. userName = request.json['userName']
  110. # if User.query.filter(User.LOGINNAME == loginname).filter(User.ID != id).first():
  111. # return jsonify({'code': 201, 'msg': '更新用户失败,用户名已存在!'})
  112. user = User.query.get(id)
  113. user.UPDATEDATETIME = datetime.now()
  114. if 'nickName' in request.json: user.NAME = request.json['nickName']
  115. if 'sex' in request.json: user.SEX = request.json['sex']
  116. if 'email' in request.json: user.EMAIL = request.json['email']
  117. if 'phonenumber' in request.json: user.PHONENUMBER = request.json['phonenumber']
  118. if 'deptId' in request.json: user.organizations = Organization.query.filter(Organization.ID == request.json['deptId']).all()
  119. if 'roleIds' in request.json:
  120. user.roles = [Role.query.get(roleId) for roleId in request.json['roleIds']]
  121. db.session.add(user)
  122. return jsonify({'code': 200, 'msg': '更新成功!'})
  123. @base.route('/system/user', methods=['POST'])
  124. @login_required
  125. @permission('system:user:add')
  126. def syuser_save():
  127. if User.query.filter_by(LOGINNAME = request.json['userName']).first():
  128. return jsonify({'success': False, 'msg': '新建用户失败,用户名已存在!'})
  129. user = User()
  130. user.ID = str(uuid.uuid4())
  131. md = hashlib.md5()
  132. md.update(request.json['password'].encode('utf-8'))
  133. user.PWD = md.hexdigest()
  134. with db.session.no_autoflush:
  135. if 'nickName' in request.json: user.NAME = request.json['nickName']
  136. if 'sex' in request.json: user.SEX = request.json['sex']
  137. if 'email' in request.json: user.EMAIL = request.json['email']
  138. if 'phonenumber' in request.json: user.PHONENUMBER = request.json['phonenumber']
  139. if 'deptId' in request.json: user.organizations = Organization.query.filter(Organization.ID == request.json['deptId']).all()
  140. if 'roleIds' in request.json:
  141. user.roles = [Role.query.get(roleId) for roleId in request.json['roleIds']]
  142. user.LOGINNAME = request.json['userName']
  143. # add current use to new user
  144. #current_user.roles.append(user)
  145. db.session.add(user)
  146. return jsonify({'code': 200, 'msg': '新建用户成功!'})
  147. @base.route('/system/user/<id>', methods=['DELETE'])
  148. @login_required
  149. @permission('system:user:remove')
  150. def syuser_delete(id):
  151. user = User.query.get(id)
  152. if user:
  153. db.session.delete(user)
  154. return jsonify({'code': 200, 'msg': '删除成功'})
  155. @base.route('/system/user/profile/updatePwd', methods=['PUT'])
  156. @login_required
  157. def syuser_update_pwd():
  158. user = User.query.get(current_user.ID)
  159. if user:
  160. md = hashlib.md5()
  161. #提交的密码MD5加密
  162. md.update(request.args.get('oldPassword').encode('utf-8'))
  163. #MD5加密后的内容同数据库密码比较
  164. if md.hexdigest() != user.PWD:
  165. return jsonify({'code': 400, 'msg': '旧密码错误'})
  166. md = hashlib.md5()
  167. md.update(request.args.get('newPassword').encode('utf-8'))
  168. user.PWD = md.hexdigest()
  169. db.session.add(user)
  170. return jsonify({'code': 200, 'msg': '修改成功'})
  171. @base.route('/getInfo', methods=['GET'])
  172. @login_required
  173. def syuser_info():
  174. resources = []
  175. resourceTree = []
  176. resources += [res for org in current_user.organizations for res in org.resources if org.resources]
  177. resources += [res for role in current_user.roles for res in role.resources if role.resources]
  178. # remove repeat
  179. new_dict = dict()
  180. for obj in resources:
  181. if obj.ID not in new_dict:
  182. new_dict[obj.ID] = obj
  183. for resource in new_dict.values():
  184. resourceTree.append(resource.PERMS)
  185. return jsonify({'msg': '登录成功~', 'code': 200, \
  186. 'user': {'userName': current_user.LOGINNAME, 'avatar': '', 'nickName': current_user.NAME, 'userId': current_user.ID}, \
  187. 'roles': [role.NAME for role in current_user.roles], 'permissions': resourceTree})
  188. @base.route('/system/user/profile', methods=['GET'])
  189. @login_required
  190. def syuser_profile():
  191. return jsonify({'msg': '操作成功', 'code': 200, \
  192. 'data': current_user.to_json(), \
  193. 'postGroup': current_user.organizations[0].NAME if len(current_user.organizations) > 0 else '', \
  194. 'roleGroup': [role.NAME for role in current_user.roles]})
  195. @base.route('/system/user/profile', methods=['PUT'])
  196. @login_required
  197. def syuser_update_profile():
  198. id = request.json['userId']
  199. userName = request.json['userName']
  200. user = User.query.get(id)
  201. user.UPDATEDATETIME = datetime.now()
  202. if 'nickName' in request.json: user.NAME = request.json['nickName']
  203. if 'sex' in request.json: user.SEX = request.json['sex']
  204. if 'email' in request.json: user.EMAIL = request.json['email']
  205. if 'phonenumber' in request.json: user.PHONENUMBER = request.json['phonenumber']
  206. db.session.add(user)
  207. return jsonify({'code': 200, 'msg': '更新成功!'})
  208. @base.route('/system/user/authRole/<id>', methods=['GET'])
  209. @login_required
  210. def syuser_auth_role(id):
  211. user = User.query.get(id)
  212. userRoles = [role for role in user.roles]
  213. allRoles = Role.query.all()
  214. for allRole in allRoles:
  215. for userRole in userRoles:
  216. if userRole.ID == allRole.ID:
  217. allRole.flag = True
  218. return jsonify({'code': 200, 'msg': '操作成功', 'roles': [role.to_json() for role in allRoles], 'user': user.to_json()})
  219. @base.route('/base/syuser/export', methods=['POST'])
  220. @login_required
  221. def user_export():
  222. rows = []
  223. rows.append(['登录名', '姓名', '创建时间', '修改时间', '性别'])
  224. users = User.query.all()
  225. for user in users:
  226. row = []
  227. row.append(user.LOGINNAME)
  228. row.append(user.NAME)
  229. row.append(user.CREATEDATETIME)
  230. row.append(user.UPDATEDATETIME)
  231. if user.SEX == '0':
  232. row.append('女')
  233. elif user.SEX == '1':
  234. row.append('男')
  235. rows.append(row)
  236. return excel.make_response_from_array(rows, "csv",
  237. file_name="user")
  238. @base.route('/system/user/changeStatus', methods=['PUT'])
  239. @login_required
  240. @permission('system:user:edit')
  241. def syuser_status_update():
  242. user = User.query.get(request.json['userId'])
  243. if 'status' in request.json: user.STATUS = request.json['status']
  244. db.session.add(user)
  245. return jsonify({'code': 200, 'msg': '操作成功'})