const http = require('http'),
express = require('express'),
graphql = require('express-graphql'),
app = express();
app.use('/graphql', graphql({
/* some setting */
}));
http.createServer(app).listen(3000);
scan(middleware_path, middleware);
function scan (dir, d) {
fs.readdirSync(dir).forEach(function(file) {
if (fs.statSync(dir + '/' + file).isDirectory()) {
d[file] = d[file] || {};
scan(dir + '/' + file, d[file]);
} else if (file.endsWith('.js') {
file = file.slice(0, -3);
try {
d[file] = require(middleware_path + file);
} catch (e) {
console.log(e);
}
}
});
}
var roleModule = require(./libs/roles);
var checkRole = function (name) { // пишем middleware один раз и для всех, передаем имя роутера через замыкание
return function (req, res, next) {
roleModule.hasPermission(req.currUser.role, name, function(permitted){ // возвращать флаг первым параметром ОЧЕНЬ плохая практика, по соглашению в node.js первым аргумент в коллбеке должна быть ошибка
if (permitted)
next();
else
res.sendStatus(403);
})
}
}
var router = express.Router();
router.use(checkRole("%name")); // где name это имя вашего модуля
app.use('/user', router);