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

Tra*_*rks 78 security node.js express

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

我们如何实施安全模型以防止用户看到他们无权访问的内容?

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

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

Lin*_*iel 133

每条路线通常适合我.这就是我通常做的事情:

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"));
Run Code Online (Sandbox Code Playgroud)

  • 您可以让“requireRole”采用数组来代替吗?并检查“indexOf”。 (2认同)
  • @nomadoda对我来说似乎是一个不同的问题,但是您必须以某种方式刷新会话。这取决于您使用的会话支持存储,最简单的方法是让用户在进行此类更改后再次登录。 (2认同)

Clé*_*aud 8

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


McM*_*eep 7

查看NodeJS ACL /权限系统的此列表.IMHO OptimalBits node_acl看起来最好.