adminUser.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. 'use strict';
  2. const Service = require('egg').Service;
  3. const assert = require('assert');
  4. const moment = require('moment');
  5. // const crypto = require('crypto');
  6. const sm3 = require('sm3');
  7. const uuid = require('uuid');
  8. class adminUserService extends Service {
  9. async create({ acct, password, userName, phone, state, roleList }) {
  10. assert(acct, '帐号不存在');
  11. assert(password, '密码不存在');
  12. assert(userName, '用户名不存在');
  13. assert(state, '状态不存在');
  14. const { AdminUser: model } = this.ctx.model;
  15. const user = await model.find({ acct });
  16. if (user.length > 0) return { errmsg: '帐号已存在', errcode: -2001 };
  17. const createAt = moment().format('x');
  18. // 生成uuid盐值
  19. const salt = uuid.v1();
  20. // sm3 加盐加密
  21. password = sm3(`${password}:${salt}`);
  22. try {
  23. const res = await model.create({ acct, password, userName, phone, createAt, state, roleList, salt });
  24. return { errmsg: '', errcode: 0, res };
  25. } catch (error) {
  26. console.log(error);
  27. throw new Error('添加失败');
  28. }
  29. }
  30. async update({ userName, phone, _id, roleList, state, password }) {
  31. assert(_id, 'id不存在');
  32. const { AdminUser: model } = this.ctx.model;
  33. const user = await model.findOne({ _id });
  34. try {
  35. if (password) {
  36. // sm3 使用数据库存储的盐值 加密
  37. password = sm3(`${password}:${user.salt}`);
  38. }
  39. await model.findById(_id).update({ userName, phone, roleList, state, password });
  40. return { errmsg: '', errcode: 0 };
  41. } catch (error) {
  42. console.log(error);
  43. throw new Error('修改失败');
  44. }
  45. }
  46. async pwdUpdate({ acct, password, userName, confirmPwd }) {
  47. assert(acct, '账号不存在');
  48. const { AdminUser: model } = this.ctx.model;
  49. const user = await model.findOne({ acct });
  50. if (!user) return { errcode: -1001, errmsg: '用户不存在', data: '' };
  51. const cpwd = sm3(`${confirmPwd}:${user.salt}`);
  52. if (user.password !== cpwd) return { errcode: -1001, errmsg: '原密码不正确', data: '' };
  53. try {
  54. const res = await model.findOne({ userName });
  55. if (res.password !== cpwd) {
  56. return { errmsg: '原密码错误', errcode: -2003 };
  57. }
  58. password = sm3(`${password}:${user.salt}`);
  59. await model.findByIdAndUpdate(res._id, { password });
  60. return { errmsg: '', errcode: 0 };
  61. } catch (error) {
  62. throw new Error('修改失败');
  63. }
  64. }
  65. async del({ id }) {
  66. assert(id, 'id不存在');
  67. const { AdminUser: model } = this.ctx.model;
  68. try {
  69. await model.remove({ _id: id });
  70. return { errmsg: '', errcode: 0 };
  71. } catch (error) {
  72. throw new Error('删除失败');
  73. }
  74. }
  75. async query({ skip, limit, userName, state, acct }) {
  76. const { AdminUser: model } = this.ctx.model;
  77. const filter = {};
  78. if (userName) filter.userName = userName;
  79. if (state) filter.state = state;
  80. if (acct) filter.acct = acct;
  81. try {
  82. let res;
  83. const total = await model.find({ ...filter });
  84. if (skip && limit) {
  85. res = await model.find({ ...filter }, { password: false, salt: false }).skip(Number(skip) * Number(limit)).limit(Number(limit));
  86. } else {
  87. res = await model.find({ ...filter }, { password: false, salt: false });
  88. }
  89. return { errmsg: '', errcode: 0, data: res, total: total.length };
  90. } catch (error) {
  91. throw new Error('查询失败');
  92. }
  93. }
  94. }
  95. module.exports = adminUserService;