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

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

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

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

推荐答案

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

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相关问答推荐

MongoDB-如何验证Document字段以仅允许特定的文件扩展名?

容器端口是容器内 node 应用程序的端口吗?

使用NodeJS输出检索Base64图像的网络报废

聚合发布/订阅消息

JEST模拟由http服务器控制器导入的ES模块

如何在 ElectronJS 中播放音频文件

Node js 处理回调和 Promise

如何从 Mongo Atlas 触发器向 GCP PubSub 发出经过身份验证的请求

在父模式中设置默认值.

在 React 和 Socket.io 中使用 Effect 钩子重新渲染两次

强制 TypeScript 生成带有.js扩展名的导出/导入;运行 node 16?

MongoDB Atlas中的聚合触发器不起作用

NestJS TypeORM 可选查询不起作用

从 Node.js 应用程序查询 Heroku 托管的 Postgres 数据库时出现自签名证书错误

将 myproject/.npmrc 与注册表一起使用

TypeError:winston.Logger 不是带有winston 和morgan 的构造函数

对不同对象中的函数使用相同的键时,V8 中的函数调用缓慢

mongo 可以 upsert 数组数据吗?

从 React(同构应用程序)进行 API 调用时出现Access-Control-Allow-Origin问题

如何断言不为空?