我将 Node.JS 与 Express、Angular.JS 和 ACL 的节点模块连接角色一起使用。我想允许 user.status 为“Platinum”的用户访问“Platinum”而不是“Gold”,反之亦然。
我的 ACL 部分正在工作,如果我在导航栏中输入 /Platinum,我无法访问 /Gold,但是当我尝试访问 /Platinum 时,我只能获得模板而不是 root shell,所以出现的是:
You made it!
You have the {{status}} status!
如果我单击指向 /Platinum 的 Angular 链接,则一切正常。如果我在导航栏中输入任何中性地址,一切正常。
这应该很容易解决,但我还没有弄清楚。
这是设置授权的代码,我很确定这里一切正常。
ConnectRoles = require('connect-roles')
var user = new ConnectRoles({
failureHandler: function(req, res, action){
var accept = req.headers.accept || '';
res.status(403);
if(accept.indexOf('html')) {
res.render('access-denied', {action: action});
} else {
res.send('Access Denied - You don\'t have permission to: ' + action);
}
}
});
var app = express();
app.use(user.middleware());
// Setting up user authorizations,
// i.e. if req.user.status = "Platinum", they are given Platinum status
user.use('Platinum', function(req) {
if (req.user.status == 'Platinum') {
return true;
}
});
user.use('Gold', function(req) {
if (req.user.status == 'Gold') {
return true;
}
});
user.use('Admin', function(req) {
if (req.user.status == 'Admin') {
return true;
}
});
这设置了授权,现在问题出在路由下面。
app.post('/login', passport.authenticate('local',
{ successRedirect: '/', failureRedirect: '/login' }));
app.get('/Platinum', user.is('Platinum'), function(req, res) {
//Obviously the code below is wrong.
res.render('templates/support/Platinum');
});
app.get('/Gold', user.is('Gold'), function(req, res) {
res.render('templates/support/Gold');
});