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

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

我们是否将安全性作 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相关问答推荐

node 模块错误:类型参数OT具有循环约束''

MongoDB:更新批量操作中许多不能正常工作的内容

如果非SQL函数在事务内部运行失败,PG-Promise事务会回滚吗?

如何在MongoDB中更新嵌套数组

获取驱动器文件夹的直接子文件夹时出现问题

如何在 ElectronJS 中播放音频文件

DynamoDB 分页数据检索

表达 js 错误处理程序在第一个之后被忽略

为什么后端开发需要单独的服务器?

Discord.js V14 interaction.editReply 给出了一个无效的 webhook 令牌错误

Node.js 大文件上传到 MongoDB 阻塞了事件循环和工作池

Mongodb v4.0 Transaction, MongoError: Transaction numbers are allowed on a replica set member or mongos

Mongoose:查找、修改、保存

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

Node.js -Firebase 服务帐户私钥不会解析

名称类型为 mongoose 的字段

Express.js中的bodyParser.urlencoded({extended: true }))和bodyParser.json()是什么意思?

- configuration.output.path:提供的值public不是绝对路径!使用 Webpack

使用 Monit 而不是基本的 Upstart 设置有什么好处?

Mongoose - 验证邮箱语法