我们有一个具有两种类型的用户的应用程序。根据用户的登录方式,我们希望他们可以访问应用程序的不同部分。
我们如何实现一种安全模型以防止用户看到他们无法访问的内容?
我们是否将安全性纳入每条路线的实施中?问题在于我们在请求之间会有一些重复的逻辑。我们可以将其移到辅助函数中,但是仍然需要记住调用它。
我们是否将安全性作为全局app.all()路由处理程序的一部分?问题是我们必须检查每条路线,并根据众多规则执行不同的逻辑。至少所有代码都放在一个地方,但是……所有代码都放在一个地方。
Answers:
每条路线都可以正常使用。这通常是我要做的:
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"));
requireRole
代替数组吗?并检查indexOf
。
您可以在everyauth中使用功能js,这与CanCan for Rails https://github.com/scottkf/ability-js十分相似
查看此列表,了解NodeJS ACL / Permission系统。恕我直言,OptimalBits node_acl看起来最好。