Узел.js + Express.модель безопасности разрешений пользователя js
У нас есть приложение, которое имеет два типа пользователей. В зависимости от того, как пользователь входит в систему, мы хотим, чтобы они имели доступ к различным частям приложения.
Как мы реализуем модель безопасности для предотвращения того, чтобы пользователи видели вещи, к которым у них нет доступа?
делаем ли мы безопасность частью реализации каждого маршрута? Проблема в том, что у нас будет некоторая дублирующая логика между запросами. Мы могли бы переместить это в вспомогательные функции, но нам все равно нужно чтобы не забыть позвонить ему.
мы делаем безопасность частью глобального приложения.все() обработчик маршрута? Проблема в том, что мы должны проверять каждый маршрут и делать различную логику, основанную на множестве правил. По крайней мере, весь код находится в одном месте, но потом... весь код находится в одном месте.
4 ответа:
наличие его на маршруте обычно работает для меня. Это то, что я обычно делаю:
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"));
вы можете использовать ability-js с everyauth, который очень похож на канкан для Rails https://github.com/scottkf/ability-js
посмотри этот список NodeJS для систем управления доступом/разрешение. ИМХО OptimalBits node_acl выглядит лучше.
теперь есть модуль узла разрешение для этого. Он очень прост в использовании, очень похож на принятый ответ, но все же некоторые функции добавлены.