无法访问Firestore规则文档中的字段

时间:2019-05-29 20:57:42

标签: firebase google-cloud-firestore firebase-security-rules

我正在为当前正在开发的android应用程序编写Firestore规则。我在编写安全规则时遇到了麻烦。我想要一个编辑器集合,其中每个文档都以一个userId命名,并在其中存储该userId的角色。

每个编辑者的文档路径为用户/(正在访问的所有者数据的用户ID)/编辑者/(正在访问的用户的用户ID)。包含角色的字段是“角色”,当前唯一的角色是“所有者”。因此,它在数据库中显示为角色:“所有者”。

match /users/{userId} {
    allow read, write: if getUserData().Role == "Owner";   
}

function isSignedIn() {
    return request.auth != null;
}

function getUserData()
{
    return get(/databases/$(database)/documents/users/$(userId)/editors/$(request.auth.uid)).data;
}

模拟读写目前被拒绝。

1 个答案:

答案 0 :(得分:0)

鉴于函数的作用域,您必须将userId传递给对getUserData的调用:

match /users/{userId} {
    allow read, write: if getUserData(userId).Role == "Owner";   
}

function isSignedIn() {
    return request.auth != null;
}

function getUserData(userId)
{
    return get(/databases/$(database)/documents/users/$(userId)/editors/$(request.auth.uid)).data;
}