我正在为当前正在开发的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;
}
模拟读写目前被拒绝。
答案 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;
}