Węzeł.js + Express.js User Permission security Model

Mamy aplikację, która ma dwa typy użytkowników. W zależności od sposobu logowania się użytkownika, chcemy, aby miał on dostęp do różnych części aplikacji.

Jak wdrożyć model zabezpieczeń uniemożliwiający użytkownikom widzenie rzeczy, do których nie mają dostępu?

Czy zabezpieczamy każdą implementację tras? Problem polega na tym, że będziemy mieli zduplikowaną logikę w żądaniach. Możemy przenieść to do funkcji pomocniczych, ale nadal musimy pamiętać, aby zadzwoń.

Czy uczynimy bezpieczeństwo częścią globalnej aplikacji.all () route handler? Problem polega na tym, że musimy sprawdzić każdą trasę i zrobić inną logikę w oparciu o wiele zasad. Przynajmniej cały kod jest w jednym miejscu, ale wtedy... cały kod jest w jednym miejscu.

Author: Travis Parks, 2012-03-08

4 answers

Posiadanie go na trasie zazwyczaj mi odpowiada. To jest to, co zwykle robię:

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"));
 127
Author: Linus Gustav Larsson Thiel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 11:16:42

Możesz używać ability-js z każdym, co jest dość podobne do CanCan for Rails https://github.com/scottkf/ability-js

 8
Author: Clément Renaud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-21 13:50:10

Spójrz na tę listę dla Systemów NodeJS ACL/Permission. IMHO OptimalBits node_acl wygląda najlepiej.

 6
Author: McMeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-19 12:58:28

Istnieje teraz moduł węzła pozwolenie do tego. Jest bardzo łatwy w użyciu, bardzo podobny do zaakceptowanej odpowiedzi, ale nadal dodano kilka funkcji.

 2
Author: Tommz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 16:22:11