Node.js + Express.js用户权限安全模型

我们有一个应用程序,有两种types的用户。 根据用户login的方式,我们希望他们可以访问应用程序的不同部分。

我们如何实现一个安全模型来防止用户看到他们无法访问的东西?

我们是否将安全作为每条路线实施的一部分? 问题是,我们将有一些重复的逻辑请求。 我们可以将其转换为辅助函数,但是我们仍然需要记住调用它。

我们是否将安全性作为全局app.all()路由处理程序的一部分? 问题是,我们必须检查每条路线,并根据多种规则做不同的逻辑。 至less所有的代码都在一个地方,但是…所有的代码都在一个地方。

通过它路由通常为我工作。 这是我通常做的:

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")); 

你可以在everyauth中使用ability-js,这与CanCan for Rails非常相似https://github.com/scottkf/ability-js

看一下NodeJS ACL /权限系统的列表 。 恕我直言OptimalBits node_acl看起来最好。

现在有了Node模块的权限 。 这是非常容易使用,非常类似于接受的答案,但仍然有一些function被添加。