123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 'use strict';
- const Service = require('egg').Service;
- const assert = require('assert');
- const crypto = require('crypto');
- const menu = require('../public/adminMenu');
- class UserService extends Service {
- async login({ acct, password }) {
- assert(acct, '帐号不存在');
- assert(password, '密码不存在');
- const { AdminUser: model } = this.ctx.model;
- const hash = crypto.createHmac('sha256', this.app.config.userSecret);
- const pwd = hash.update(password).digest('hex');
- try {
- const res = await model.find({ acct });
- if (res.length <= 0) {
- return { errmsg: '用户不存在', errcode: -2003 };
- }
- const userInfo = res[0];
- if (userInfo.state !== '0') {
- return { errmsg: '用户状态异常', errcode: -2003 };
- }
- if (userInfo.password !== pwd) {
- return { errmsg: '密码错误', errcode: -2003 };
- }
- const token = this.app.jwt.sign({ acct: userInfo.acct, userName: userInfo.userName, id: userInfo._id }, this.app.config.jwt.secret);
- return { errmsg: '', errcode: 0, token, userInfo: { acct: userInfo.acct, userName: userInfo.userName, id: userInfo._id } };
- } catch (error) {
- throw new Error('登录失败');
- }
- }
- async getUserMenu() {
- const { AdminUser: model } = this.ctx.model;
- const { Role: rolemodel } = this.ctx.model;
- try {
- const str = this.ctx.request.header.authorization;
- const token = str.substring(7);
- const decode = this.ctx.app.jwt.verify(token, this.app.config.jwt.secret);
- const menulist = [];
- const res = await model.find({ acct: decode.acct });
- if (res.length > 0) {
- const userRoleList = res[0].roleList;
- if (userRoleList && userRoleList.length > 0) {
- for (let e = 0; e < userRoleList.length; e++) {
- const role = await rolemodel.find({ code: userRoleList[e], state: '0' });
- if (role.length > 0) {
- const adminMenuList = role[0].adminMenuList;
- for (let i = 0; i < adminMenuList.length; i++) {
- const item = menu.filter(j => adminMenuList[i] === j.id)[0];
- if (!menulist.includes(item) && item) {
- menulist.push(item);
- }
- }
- }
- }
- }
- }
- return { errcode: 0, errmsg: '', data: menulist };
- } catch (error) {
- throw new Error('登录失败');
- }
- }
- }
- module.exports = UserService;
|