Security Node.js+;Express.js用户权限安全模型
我们有一个应用程序,它有两种类型的用户。根据用户登录的方式,我们希望他们能够访问应用程序的不同部分 我们如何实现一个安全模型来防止用户看到他们无权访问的东西 我们是否将安全性作为每个路线实施的一部分?问题是,我们会在请求之间有一些重复的逻辑。我们可以将其移动到helper函数中,但仍然需要记住调用它Security Node.js+;Express.js用户权限安全模型,security,node.js,express,Security,Node.js,Express,我们有一个应用程序,它有两种类型的用户。根据用户登录的方式,我们希望他们能够访问应用程序的不同部分 我们如何实现一个安全模型来防止用户看到他们无权访问的东西 我们是否将安全性作为每个路线实施的一部分?问题是,我们会在请求之间有一些重复的逻辑。我们可以将其移动到helper函数中,但仍然需要记住调用它 我们是否将安全性作为全局app.all()路由处理程序的一部分?问题是,我们必须检查每条路线,并根据大量规则执行不同的逻辑。至少所有的代码都在一个地方,但是。。。所有代码都放在一个地方。每条路线都有
我们是否将安全性作为全局app.all()路由处理程序的一部分?问题是,我们必须检查每条路线,并根据大量规则执行不同的逻辑。至少所有的代码都在一个地方,但是。。。所有代码都放在一个地方。每条路线都有代码通常对我很有用。这是我通常做的:
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一起使用,这与CanCan for Rails非常相似看看NodeJS ACL/权限系统。IMHO看起来最好。现在有了这个节点模块。它非常易于使用,与公认的答案非常相似,但仍然添加了一些功能。是否有Node.js ACL模块的最新列表?我们正在考虑如何在Meteor.js应用程序中实现ACL。但如果只有两个角色可以访问route呢?您可以让
requireRole
使用数组代替?并使用索引检查。您可以添加示例吗?这最后一个路由是否保护所有以/foo/bar开头的路由?如果数据库上的权限发生更改怎么办?如何确保会话与数据库一致?@nomadoda对我来说,这似乎是一个不同的问题,但您必须以某种方式刷新会话。这取决于您使用的会话备份存储,最简单的方法是让用户在该类型更改后再次登录。