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

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

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

我们是否将安全性作为全球应用程序的一部分.所有()路由处理程序?问题是,我们必须判断每条路由,并根据大量规则执行不同的逻辑.至少所有代码都在一个地方,但是...所有代码都在一个地方.

推荐答案

每一条路由都有它通常对我有用.这是我通常做的:

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"));

Node.js相关问答推荐

AWS EC2 npm install 突然很慢

aws cdk 2.0 init 应用程序无法构建更漂亮的问题,这来自 jest-snapshot

在 gatsby 中安装软件包时不推荐使用的错误

为什么我在生产环境中 deproy Next.js 示例项目时 CSS 不起作用?

使用 mongoose 查找过去 7 天的注册用户总数

类型中缺少属性,该类型是由类实现的接口

使用 $in 查询时,如何获取 mongoDB 中每个唯一 ID 的 n 个文档?

node.js 变量不存在代码块

node.js 中 pdfkit-tables 中的垂直线

baseurl64 缓冲区解码

Node.js 17.0.1 Gatsby 错误-“数字信封例程::不支持 ... ERR_OSSL_EVP_UNSUPPORTED”

Javascriptpromise 好奇心

`npm install` 在 node-gyp 重建时失败,并带有`gyp:未检测到 Xcode 或 CLT 版本!`

React Hooks - 使用 useState 与仅使用变量

如何在 Node 中的 http.request() 上设置超时?

使用 pm2 编程 api 重命名进程

npm 错误! 404 未找到:事件流@3.3.6

如何手动修复 npm 漏洞?

如何修复此错误 TypeError [ERR_INVALID_CALLBACK]: Callback must be a function

如何在MERN中组织后端和前端的文件结构