Firestore规则将参考与构造路径进行比较

时间:2019-02-22 22:08:20

标签: firebase google-cloud-firestore

在我的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;
}

我尝试了很多事情,但不知道如何进行这项工作。

(我知道使用字符串代替引用是可行的,但我宁愿使用引用)

3 个答案:

答案 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