manager_model.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. return false;
  75. }
  76. // 验证旧密码
  77. let encryptPassword = this.encryptPassword(managerData.token, password);
  78. if (encryptPassword !== managerData.password) {
  79. throw '用户名或密码错误';
  80. }
  81. // 加密新密码
  82. let encryptNewPassword = this.encryptPassword(managerData.token, newPassword);
  83. let result = await this.db.update({username: username}, {password: encryptNewPassword});
  84. return result.ok === 1;
  85. }
  86. /**
  87. * 创建管理员用户
  88. *
  89. * @return {Promise}
  90. */
  91. createManager() {
  92. let insertData = {
  93. username: 'test',
  94. password: this.encryptPassword('DjfDTys2dh2', 'test123'),
  95. token: 'DjfDTys2dh2',
  96. create_time: new Date().getTime(),
  97. role: 1,
  98. super_admin: 1
  99. };
  100. return this.db.create(insertData);
  101. }
  102. }
  103. export default ManagerModel;