我的网络应用需要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路由?
答案 0 :(得分:1)
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;
}
};
这里是我的 config 文件,它定义了我的mongo连接和acl前缀。在我们想要定义可能在这些路线上设置权限的路线之后。
这些行将添加到admin.js文件中
var acl = require('../authorization').getAcl();
// protected URLs
router.get('/list', acl.middleware(2, userController.getUserId), adminController.list.get);
答案 1 :(得分:0)
您无需更改" isAdmin"功能!使用这样的东西:
if else