【发布时间】:2018-04-16 04:37:52
【问题描述】:
我正在尝试使用 express 和 mongoose 开发 Node.js 后端。
网络上有很多关于如何实现适当的身份验证层的示例,但我找不到任何如何正确实现授权层的示例。
在我的具体情况下,我正在创建一个多用户应用程序的后端,我希望每个用户只能看到自己插入的数据。
我有三个模型:
- 用户
- 类别
- 文档
用户拥有一个或多个类别,类别包含零个或多个文档。
CRUD 操作在以下端点上实现:
/user/:userid
/user/:userid/category
/user/:userid/category/:categoryid
/user/:userid/category/:categoryid/document
/user/:userid/category/:categoryid/document/:documentid
在身份验证部分,我为每个请求设置了当前登录的用户 ID,因此我可以轻松检查
jsonwebtoken.userId == req.params.userid
否则返回403 错误。
检查类别的所有权非常容易,因为每个类别都包含对创建它们的用户的引用。
var CategorySchema = mongoose.Schema({
name: {
type: String,
required: true,
trim: true
},
user_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
index: true
}
});
然而,在 Document 模型中,我只有一个对其所属类别的引用,但我没有添加对用户的引用。
因此,我想知道如何处理“嵌套”关系。我是否需要在任何深度级别为所有这些添加 user_id 引用?有什么最佳做法吗?
此外,这是做我需要的正确方法还是有任何官方/成熟的库已经这样做了?
【问题讨论】:
-
这里有一个关系数据的例子。该解决方案在像 mongo 这样的 noSQL 数据库中并不优雅。我只想将“user_id”添加到文档中。这将防止将来出现优化问题。
-
@user1695032 谢谢,我认为最好通过
user_id检查所有权,否则我必须查询类别以查看所有者是否为user_id并且仅在那个时候允许用户创建一个新文档,这会降低性能。对我来说似乎很奇怪,虽然这样的基本用例没有记录或得到图书馆的官方支持。
标签: node.js rest express mongoose