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

我们有一个具有两种用户类型的应用程序。根据用户的登录方式,我们希望他们能够访问应用程序的不同部分。

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

我们是否将安全性作为每个路由实现的一部分?问题在于,我们在请求之间会有一些重复的逻辑。我们可以将它移动到 helper 函数中,但是仍然需要记住调用它。

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

51073 次浏览

我通常是这样做的:

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 与 every auth 一起使用,这与 CanCan for Rails https://github.com/scottkf/ability-js非常相似

看一下用于 NodeJS ACL/Permission 系统的 这份名单

现在有节点模块 允许来处理这个问题。它非常容易使用,非常类似于接受的答案,但仍然有一些功能被添加。