pikachu-be/src/middleware/permission.js
2019-05-16 21:03:58 +08:00

69 lines
1.8 KiB
JavaScript

import jwt from 'jsonwebtoken';
import config from '../../config/config';
import { LdapUser } from '../models/admin/User';
import { combPer, combRole } from '../utils/comb-permissions';
export default function(req, res, next) {
const BearerToken = req.headers.authorization;
if (!BearerToken) {
// 无权限
res.send({
errcode: 1,
errmsg: '用户无权限。'
});
} else {
const token = getToken(BearerToken);
if (!token) {
// 异常
res.send({
errcode: 1,
errmsg: 'token 异常。'
});
} else {
jwt.verify(token, config.jwtSecret, async (err, decode) => {
if (err) {
// 验证不通过
res.send({
errcode: 1,
errmsg: err.message
});
} else {
// 验证通过
// 获取用户信息
try {
const username = decode.username;
const searchResult = await LdapUser.findOne({ uid: username })
.populate({
path: 'userInfo',
populate: {
path: 'permissions'
}
})
.exec();
if (!searchResult) {
res.send({
errcode: 1,
errmsg: '用户信息发生异常。'
});
} else {
let permissions = [...searchResult.userInfo.permissions];
permissions = combPer(permissions);
const userInfo = JSON.parse(JSON.stringify(searchResult));
req.user = userInfo.userInfo;
next();
}
} catch (err) {
next(err);
}
}
});
}
}
}
function getToken(str) {
const reg = /^Bearer (.+)/;
const result = reg.exec(str);
return result ? result[1] : '';
}