如何为火烧规则身份验证传递额外的身份验证参数(反应原生)?



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

由于我正在将Firestore数据库与React-Native一起使用,因此我仅在插入/更新时传递相应集合的文档信息。那么,我怎样才能将用户的角色信息与此一起传递,以便我的规则得到身份验证,并且数据不会进入其他集合。

描述上述场景的一个例子:

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

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

我还有另一个集合:

/collection2/doc1
{
userRef: document1, //this is id of document1 from collection1
...
}

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

已经阅读了许多文章和方法,但其中任何一种都不满足此用例。

任何帮助将不胜感激。

为了使规则更易于阅读,您可以创建一个获取用户角色的函数,然后在条件中使用。这是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;
}
}
}

最新更新