/** * 后台管理员数据模型 * * @author CaiAoLin * @date 2017/6/1 * @version */ import BaseModel from "../../common/base/base_model"; import ManagerSchema from "./schemas/manager"; import crypto from "crypto"; class ManagerModel extends BaseModel { /** * 构造函数 * * @return {void} */ constructor() { let parent = super(); parent.model = ManagerSchema; parent.init(); } /** * 设置场景 * * @param {string} scene * @return {void} */ setScene(scene = '') { switch (scene) { // 更改密码验证规则 case 'changePassword': this.model.schema.path('password').required(true); break; } } /** * 获取列表 * * @param {object} condition * @param {number} page * @return {Promise} */ getList(condition = null, page = 1) { page = parseInt(page); page = page <= 1 ? 1 : page; let option = {page: page}; return this.db.find(condition, null, option); } /** * 用户密码加密 * * @param {string} token * @param {string} password * @return {string} */ encryptPassword(token, password) { let encryptPassword = crypto.createHmac('sha1', token).update(password) .digest().toString('base64'); return encryptPassword; } /** * 更改密码 * * @param {string} username * @param {string} password * @param {string} newPassword * @throws {string} * @return {Promise} */ async changePassword(username, password, newPassword) { // 查找对应用户 let managerData = await this.findDataByCondition({username: username}); if (managerData.length <= 0) { return false; } // 验证旧密码 let encryptPassword = this.encryptPassword(managerData.token, password); if (encryptPassword !== managerData.password) { throw '用户名或密码错误'; } // 加密新密码 let encryptNewPassword = this.encryptPassword(managerData.token, newPassword); let result = await this.db.update({username: username}, {password: encryptNewPassword}); return result.ok === 1; } /** * 创建管理员用户 * * @return {Promise} */ createManager() { let insertData = { username: 'test', password: this.encryptPassword('DjfDTys2dh2', 'test123'), token: 'DjfDTys2dh2', create_time: new Date().getTime(), role: 1, super_admin: 1 }; return this.db.create(insertData); } } export default ManagerModel;