78 votes

Modèle de sécurité des permissions utilisateur de Node.js + Express.js

Nous avons une application qui a deux types d'utilisateurs. Selon la façon dont l'utilisateur se connecte, nous voulons qu'il ait accès à différentes parties de l'application.

Comment mettre en œuvre un modèle de sécurité pour empêcher les utilisateurs de voir ce à quoi ils n'ont pas accès ?

Devons-nous intégrer la sécurité dans la mise en œuvre de chaque route ? Le problème est que nous aurons une logique dupliquée à travers les requêtes. Nous pourrions déplacer cette logique dans les fonctions d'aide, mais nous devrions toujours nous rappeler de l'appeler.

Doit-on intégrer la sécurité dans un gestionnaire de route global app.all() ? Le problème est que nous devons inspecter chaque route et faire une logique différente basée sur une multitude de règles. Au moins, tout le code est au même endroit, mais alors... tout le code est au même endroit.

133voto

Linus G Thiel Points 18378

Le fait de l'avoir par route fonctionne généralement pour moi. C'est ce que je fais habituellement :

function requireRole (role) {
    return function (req, res, next) {
        if (req.session.user && req.session.user.role === role) {
            next();
        } else {
            res.send(403);
        }
    }
}

app.get("/foo", foo.index);
app.get("/foo/:id", requireRole("user"), foo.show);
app.post("/foo", requireRole("admin"), foo.create);

// All bars are protected
app.all("/foo/bar", requireRole("admin"));

// All paths starting with "/foo/bar/" are protected
app.all("/foo/bar/*", requireRole("user"));

8voto

Clément Renaud Points 875

Vous pouvez utiliser ability-js avec everyauth, qui est assez similaire à CanCan pour Rails https://github.com/scottkf/ability-js

7voto

McMeep Points 234

Jetez un coup d'œil à cette liste pour les systèmes ACL/Permission de NodeJS. IMHO OptimalBits noeud_acl est le plus beau.

3voto

Tommz Points 444

Il y a maintenant le module Node autorisation pour ça. C'est très facile à utiliser, très similaire à la réponse acceptée, mais certaines fonctionnalités sont ajoutées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X