| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- const createError = require('http-errors');
- const models = require('../../models');
- function checkLogin(req, res, next) {
- if (!req.session) {
- next(createError(500, 'session服务异常'));
- } else if (!req.session.user) {
- next(createError(401, '请先登录'));
- } else {
- next();
- }
- }
- async function checkPermission(permission, req) {
- if (!req.session)
- throw createError(500, 'session服务异常');
- if (!req.session.user)
- throw createError(401, '请先登录');
- await checkAndUpdateAuth(req);
- let auth = req.session.auth;
- if (!auth)
- throw createError(401, '权限不够');
- if (permission && !auth.isSuper) {
- let p = auth.permissions.find(x => {
- return x == permission;
- })
- if (!p) throw createError(401, '权限不够')
- }
- }
- /**
- * 检测用户是否有某项
- * @param {String} permission
- */
- function checkAdmin(permission) {
- return function (req, res, next) {
- (async function () {
- await checkPermission(permission, req);
- next();
- })().catch(next);
- }
- }
- /**
- * Update session auth.
- * 有效期1分钟
- * @param {Request} req
- */
- async function checkAndUpdateAuth(req) {
- let user = req.session.user;
- let auth = req.session.auth;
- auth = await buildAuth(user);
- req.session.auth = auth;
- }
- /**
- * Build auth from database.
- * @param {*} user
- * @param {*} dealerId
- */
- async function buildAuth(_user) {
- let auth = {};
- if (!_user) return auth;
- let user = await models.User.findById(_user._id)
- .populate('roles');
- let permissions = user.roles.reduce((ps, role) => {
- ps = ps.concat(role.permissions);
- return ps;
- }, []);
- let roles = user.roles;
- let isSuper = permissions.includes('*');
- auth = { permissions, roles, isSuper };
- auth.ts = new Date().getTime();
- return auth;
- }
- module.exports = {
- checkLogin,
- checkAdmin,
- checkPermission,
- checkAndUpdateAuth,
- }
|