我的网络应用程序需要2个用户角色(用户和管理员)。我正在使用护照本地身份验证。
现在通过添加下面的代码我有2个角色,但管理员也可以访问用户路由。我必须手动到/ admin路由才能使用它的功能。
function isLoggedIn(req, res, next) {
if (req.isAuthenticated())
return next();
res.redirect('/login');
}
function isAdmin(req, res, next) {
if (req.isAuthenticated()) {
if (req.user.local.role == "admin") {
return next();
}
}
res.redirect('/login');
}
现在我的问题是如何更改isAdmin功能,以便当我以管理员身份登录时,我立即转到/ admin路由?
expressjs中的用户角色和访问权限。如果您想首先创建角色,然后在自己的应用程序上创建权限后,我们必须定义第一个角色,然后添加这些角色的权限
var acl = require('acl');
var mongoose = require('mongoose');
var config = require('./config');
acl = new acl(new acl.mongodbBackend(mongoose.connection.db, config.db.aclCollectionPrefix), { debug: function(string) { console.log(string); } });
module.exports = {
init: function() {
acl.addRoleParents('superAdmin', 'admin');
acl.addRoleParents('admin', 'user');
acl.allow([
{
roles: ['admin'],
allows: [
{
resources: '/user/list',
permissions: 'get'
}
]
},
{
roles: ['superAdmin'],
allows: [
{
resources: '/admin/list',
permissions: 'get'
}
]
}
]);
},
getAcl: function() {
return acl;
}
};
这里是我的配置文件,它定义了我的mongo连接和acl前缀。在我们想要定义可能在这些路线上设置权限的路线之后。
这些行将添加到admin.js文件中
var acl = require('../authorization').getAcl();
// protected URLs
router.get('/list', acl.middleware(2, userController.getUserId), adminController.list.get);
您无需更改“isAdmin”功能!使用这样的东西:
app.get('/admin-page', isAdmin, function(req, res) {
res.render('admin', { //'admin' is your admin template
user : req.user
// or any other data you want to render!
});
});