manager_model.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /**
  2. * 后台管理员数据模型
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/6/1
  6. * @version
  7. */
  8. import BaseModel from "../../common/base/base_model";
  9. import ManagerSchema from "./schemas/manager";
  10. import crypto from "crypto";
  11. class ManagerModel extends BaseModel {
  12. /**
  13. * 构造函数
  14. *
  15. * @return {void}
  16. */
  17. constructor() {
  18. let parent = super();
  19. parent.model = ManagerSchema;
  20. parent.init();
  21. }
  22. /**
  23. * 设置场景
  24. *
  25. * @param {string} scene
  26. * @return {void}
  27. */
  28. setScene(scene = '') {
  29. switch (scene) {
  30. // 更改密码验证规则
  31. case 'changePassword':
  32. this.model.schema.path('password').required(true);
  33. break;
  34. }
  35. }
  36. /**
  37. * 获取列表
  38. *
  39. * @param {object} condition
  40. * @param {number} page
  41. * @return {Promise}
  42. */
  43. getList(condition = null, page = 1) {
  44. page = parseInt(page);
  45. page = page <= 1 ? 1 : page;
  46. let option = {page: page};
  47. return this.db.find(condition, null, option);
  48. }
  49. /**
  50. * 用户密码加密
  51. *
  52. * @param {string} token
  53. * @param {string} password
  54. * @return {string}
  55. */
  56. encryptPassword(token, password) {
  57. let encryptPassword = crypto.createHmac('sha1', token).update(password)
  58. .digest().toString('base64');
  59. return encryptPassword;
  60. }
  61. /**
  62. * 更改密码
  63. *
  64. * @param {string} username
  65. * @param {string} password
  66. * @param {string} newPassword
  67. * @throws {string}
  68. * @return {Promise}
  69. */
  70. async changePassword(username, password, newPassword) {
  71. // 查找对应用户
  72. let managerData = await this.findDataByCondition({username: username});
  73. if (managerData.length <= 0) {
  74. console.log('222');
  75. return false;
  76. }
  77. // 验证旧密码
  78. let encryptPassword = this.encryptPassword(managerData.token, password);
  79. if (encryptPassword !== managerData.password) {
  80. throw '用户名或密码错误';
  81. }
  82. // 加密新密码
  83. let encryptNewPassword = this.encryptPassword(managerData.token, newPassword);
  84. let result = await this.db.update({username: username}, {password: encryptNewPassword});
  85. return result.ok === 1;
  86. }
  87. /**
  88. * 创建管理员用户
  89. *
  90. * @return {Promise}
  91. */
  92. createManager() {
  93. let insertData = {
  94. username: 'test',
  95. password: this.encryptPassword('DjfDTys2dh2', 'test123'),
  96. token: 'DjfDTys2dh2',
  97. create_time: new Date().getTime(),
  98. role: 1,
  99. super_admin: 1
  100. };
  101. return this.db.create(insertData);
  102. }
  103. }
  104. export default ManagerModel;