我们的应用程序有两种类型的用户。根据用户的登录方式,我们希望他们可以访问应用程序的不同部分。
我们如何实施安全模型以防止用户看到他们无权访问的内容?
我们是否为每条路线实施安全部分?问题是我们在请求之间会有一些重复的逻辑。我们可以将其转换为辅助函数,但我们仍然需要记住调用它。
我们是否将安全性作为全局app.all()路由处理程序的一部分?问题在于我们必须检查每条路线并根据多种规则执行不同的逻辑。至少所有代码都在一个地方,但是......所有代码都在一个地方。
答案 0 :(得分:130)
拥有每条路线通常对我有用。这就是我通常做的事情:
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"));
答案 1 :(得分:8)
你可以将ability-js与everyauth一起使用,这与CanCan for Rails非常相似https://github.com/scottkf/ability-js
答案 2 :(得分:6)
查看this list的NodeJS ACL /权限系统。恕我直言OptimalBits node_acl看起来最好。
答案 3 :(得分:3)
现在有节点模块permission。它非常易于使用,与接受的答案非常相似,但仍然添加了一些功能。