在我的company
文档中,我有一个名为owner
的参考字段,它指向一个user
文档。在规则中,我试图检查经过身份验证的uid是否是公司的所有者:
match /companies/{companyId} {
allow read: if isOwner(resource.data.owner, request.auth.uid);
}
function isOwner(owner, userId) {
return path('/users/' + userId) == owner;
}
我尝试了很多事情,但不知道如何进行这项工作。
(我知道使用字符串代替引用是可行的,但我宁愿使用引用)
答案 0 :(得分:0)
为什么不在compagny文档中创建ownerId字段,并检查已认证的用户uid是否等于该值?
service cloud.firestore {
match /databases/{database}/documents {
match /companies/{compagnyId} {
allow read: if isOwner()
}
}
}
function currentData() {
return resource.data
}
function isOwner() {
return currentData().ownerId == request.auth.uid
}
答案 1 :(得分:0)
构造路径时,请包含以下前缀:/databases/(default)/documents/
。这是文档完整路径的一部分。
match /companies/{companyId} {
allow read: if isOwner(resource.data.owner, request.auth.uid);
}
function isOwner(owner, userId) {
return path('/databases/(default)/documents/users/' + userId) == owner;
}
答案 2 :(得分:0)
以下内容应该能让您在参考字段上进行比较。
match /companies/{companyId} {
allow read: if /databases/$(database)/documents/user/$(request.auth.uid) == resource.data.owner
}
注意:resource.data.owner 不是 request.resource.data.owner