In primo luogo, le decisioni di autorizzazione deve essere fatto sul lato server. Effettuarlo sul lato client in Angular.js come suggerito è anche una buona idea, ma questo è solo allo scopo di migliorare l'esperienza dell'utente, ad esempio non mostrare all'utente un link a qualcosa a cui non hanno accesso.
Con JWTs, è possibile incorporare affermazioni circa l'utente all'interno del token, in questo modo:
var jwt = require('jsonwebtoken');
var token = jwt.sign({ role: 'admin' }, 'your_secret');
per mappare i permessi di esprimere percorsi, è possibile utilizzare connect-roles per costruire funzioni di autorizzazione middleware pulite e leggibili. Supponiamo per esempio il vostro JWT viene inviato nell'intestazione HTTP e si ha la seguente (ingenuo) l'autorizzazione middleware:
// Naive authentication middleware, just for demonstration
// Assumes you're issuing JWTs somehow and the client is including them in headers
// Like this: Authorization: JWT {token}
app.use(function(req, res, next) {
var token = req.headers.authorization.replace(/^JWT /, '');
jwt.verify(token, 'your_secret', function(err, decoded) {
if(err) {
next(err);
} else {
req.user = decoded;
next();
}
});
})
Con questo, è possibile applicare la vostra politica di autorizzazione su percorsi, in questo modo:
var ConnectRoles = require('connect-roles');
var user = new ConnectRoles();
user.use('admin', function(req) {
return req.user && req.user.role === 'admin';
})
app.get('/admin', user.is('admin'), function(req, res, next) {
res.end();
})
Nota che ci sono opzioni migliori per il rilascio & JWTs convalida, come express-jwt, o utilizzando passport in combinazione con passort-jwt