????

Your IP : 3.144.251.232


Current Path : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/controllers/
Upload File :
Current File : C:/inetpub/vhost/sdoc.gdtsolutions.vn/package/app/controllers/middleware.js

const { menu } = require('../appconfig');

module.exports.permit = function (...tasks) {
  const isAllowed = function (userTasks) {
    var roles = userTasks.split(',').map(function (x) { return parseInt(x) });
    return roles.some(role => tasks.length == 0 || tasks.indexOf(role) > -1);
  }
  return function (req, res, next) {
    if (!req.isAuthenticated || !req.isAuthenticated()) {
      req.session.redirectTo = req.originalUrl || req.baseUrl;
      res.redirect('/auth')
    } else {
      var user = req.user;
      res.locals.User = user;
      if (isAllowed(user['Tasks'])) next();
      else {
        delete req.session.redirectTo;
        var err = new Error(`Bạn không được quyền truy cập đến đường dẫn ${req.originalUrl}`);
        err.status = 403;
        next(err);
      }
    }
  }
}

module.exports.useLayout = function (req, res, next) {
  let userMenu = [];
  if (req && req.user) {
    let tasks = req.user['Tasks'].split(',').map(function (x) { return parseInt(x) });
    for (let i = 0; i < menu.length; i++) {
      const item = menu[i];
      if (item['task'] && tasks.indexOf(item['task']) > -1) {
        userMenu.push(item);
      }
      else if (item.childs) {
        let userItem = {};
        Object.assign(userItem, item);
        userItem.childs = item.childs.filter(x => !x.task || tasks.indexOf(x.task) > -1)
        if (userItem.childs.length) userMenu.push(userItem);
      }
    }
  }
  if (res.locals) {
    res.locals.path = req.baseUrl + req.path;
    res.locals.userMenu = userMenu;
    res.locals.csrfToken = req.csrfToken();
    if (req && req.user) res.locals.User = req.user;
  }
  next();
}
// Session
var session = require('express-session');
const MSSQLStore = require('connect-mssql-v2');
exports.useSession = session({
  secret: process.env.SESSION_SECRET || require('crypto').randomBytes(32).toString('hex'),
  name: '__sdoc.sid',
  resave: true,
  saveUninitialized: true,
  store: new MSSQLStore(require('../models/config'), {
    autoRemove: true,
    useUTC: true,
  }),
  cookie: {
    maxAge: 24 * 60 * 60 * 1000,
  }
})