如何通过额外的身份验证参数进行Firestore规则身份验证(React-Native)?

Hri*_*odi 6 firebase react-native google-cloud-firestore react-native-firebase

我想在我的应用程序中实现基于角色的限制。我在一个收集文档中有用户角色信息。现在,我想编写规则以限制对数据库的其他集合进行不同的写入,更新操作。

因为我将Firestore数据库与React-Native一起使用,所以我在插入/更新时仅传递了相应集合的文档信息。因此,我该如何传递用户的角色信息,以使我的规则得到认证,并且数据不会进入其他集合。

描述上述情况的一个示例:

/collection1/document1
{
   prop1: value1,
   prop2: value2,
   role: "WRITE"
}

/collection1/document2
{
   prop1: value1,
   prop2: value2,
   role: "READ"
}
Run Code Online (Sandbox Code Playgroud)

现在考虑当前登录的用户是document2

我还有另一个收藏:

/collection2/doc1
{
   userRef: document1, //this is id of document1 from collection1
   ...
}
Run Code Online (Sandbox Code Playgroud)

我想为collection2配置firestore规则,即如果请求来自用户,role="WRITE"则只允许它发布/更新文档。

阅读了许多文章和方法,但是其中任何一个都不满足该用例。

任何帮助,将不胜感激。

ibe*_*oun 3

为了使规则更易于阅读,您可以创建一个获取用户角色的函数,然后在条件中使用。该firestore.rules文件如下所示:

service cloud.firestore {
  match /databases/{database}/documents {
    match /collection2/{doc} {
     allow read: if getUserRole() === 'READ' || getUserRole() === 'WRITE';
     allow create: if getUserRole() === 'WRITE';
     allow update: if getUserRole() === 'WRITE';
    }
    function getUserRole() {
        return get(/databases/$(database)/documents/collection1/$(request.auth.uid)).data.role;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)