Node.js + Express.js Модель безопасности разрешений пользователей - PullRequest
78 голосов
/ 08 марта 2012

У нас есть приложение, которое имеет два типа пользователей.В зависимости от того, как пользователь входит в систему, мы хотим, чтобы у него был доступ к различным частям приложения.

Как мы реализуем модель безопасности, чтобы пользователи не могли видеть вещи, к которым у них нет доступа?

Делаем ли мы безопасность частью каждой реализации маршрутов?Проблема в том, что у нас будет некоторая дублирующая логика в запросах.Мы могли бы перенести это в вспомогательные функции, но нам все равно нужно помнить, чтобы вызывать его.

Делаем ли мы безопасность частью глобального обработчика маршрута app.all ()?Проблема заключается в том, что мы должны проверять каждый маршрут и выполнять различную логику, основанную на множестве правил.По крайней мере, весь код находится в одном месте, но тогда ... весь код находится в одном месте.

Ответы [ 4 ]

132 голосов
/ 08 марта 2012

Как правило, это работает для меня.Это то, что я обычно делаю:

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"));
8 голосов
/ 21 марта 2012

Вы можете использовать способность-js с Everyauth, который очень похож на CanCan для Rails https://github.com/scottkf/ability-js

6 голосов
/ 19 марта 2014

Взгляните на этот список для NodeJS ACL / систем разрешений. ИМХО OptimalBits node_acl выглядит лучше всего.

3 голосов
/ 17 апреля 2015

Теперь для этого есть Node-модуль разрешение .Он очень прост в использовании, очень похож на принятый ответ, но все же некоторые функции добавлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...