【发布时间】:2018-05-03 11:42:25
【问题描述】:
我正在尝试使用 CASL 对嵌套项进行授权检查。 它使用 mongoose 查询数据并检查访问权限。
我的域名是:
- “用户”可以拥有更多“车辆”
- “文件”必须有车辆
架构:
vehicle { users: [ {type: objectId, ref: 'user'} ] }
document { vehicle: {type: objectId, ref: 'vehicle' }}
要“按用户”查找车辆:
db.getCollection('vehicle').find(
{ users: {$in: [ ObjectId("5ae1a957d67500018efa2c9d") ]} }
)
这行得通。
在文档集合中,数据有这样的记录:
{
"_id": ObjectId("5aeaad1277e8a6009842564d"),
"vehicle": ObjectId("5aea338b82d8170096b52ce9"),
"company": "Allianz",
"price": 500,
"date_start": ISODate("2018-05-02T22:00:00.000Z"),
"date_end": ISODate("2019-05-02T22:00:00.000Z"),
"createdAt": ISODate("2018-05-03T06:32:50.590Z"),
"updatedAt": ISODate("2018-05-03T06:32:50.590Z"),
"__v": 0
}
要“按用户”查找文档:
db.getCollection('document').find(
{ "vehicle.users": {$in: [ ObjectId("5ae1a957d67500018efa2c9d") ]} }
)
它不起作用。是否可以在一个“查找”查询中做到这一点?
【问题讨论】:
-
嗨阿德里亚诺;您可以在第二个查询中仔细检查集合名称吗?你说你想查询documents,但它又说
getCollection('vehicles')。您似乎不小心查询了错误的集合。 -
是的,抱歉,我修复了我的帖子正文。我正在查询 0 个结果的文档。
-
好的,这已经澄清了。我还有一个问题:您能否粘贴一个文档记录的示例,应该由您的查询返回?
-
{ "_id" : ObjectId("5aeaad1277e8a6009842564d"), "vehicle" : ObjectId("5aea338b82d8170096b52ce9"), "company" : "Allianz", "price" : 500, "date_start" : ISODate ("2018-05-02T22:00:00.000Z"), "date_end" : ISODate("2019-05-02T22:00:00.000Z"), "createdAt" : ISODate("2018-05-03T06:32: 50.590Z"), "updatedAt" : ISODate("2018-05-03T06:32:50.590Z"), "__v" : 0 }
标签: node.js mongodb mongoose mongoose-schema casl