Express、Angular.JS、および ACL のノード モジュール connect-roles で Node.JS を使用しています。user.status が "Platinum" のユーザーが "Platinum" にアクセスできるようにしたいのですが、"Gold" にはアクセスできず、その逆も同様です。
/Platinum をナビゲーション バーに入力すると、/Gold にアクセスできませんが、/Platinum にアクセスしようとすると、テンプレートのみが取得され、ルート シェルは取得されないため、次のようになります。
You made it!
You have the {{status}} status!
/Platinum への角度のあるリンクをクリックすると、すべてが正常に機能します。ナビゲーション バーにニュートラル アドレスを入力すると、すべて正常に機能します。
これは簡単に修正できるはずですが、私はそれを理解していません。
これが承認を設定するコードです。ここにあるものはすべて問題ないと確信しています。
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');
});