安全规则:在一个文档中存储唯一的用户名

时间:2019-07-24 11:13:18

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

在我的应用程序上,我试图做到这一点,以便用户必须具有唯一的用户名。

我当前的方法是拥有一个Social集合和一个名为Usernames的文档。该文档将用户userID存储为字段的键,然后将其username存储为值。

我正在努力为此编写正确的安全规则。我想要这样:

  • 所有登录的用户都可以获取此文档
  • 用户只能在文档中更新其自己的数据,格式为[theirUserId:他们的用户名]
  • 不能有重复的用户名,例如
    • userIdA:“ foo”
    • userIdB:“ foo”

目前,我无法上班的唯一要点是检查是否已使用用户名。

我想到的另一种解决方案是反转字段(用户名:userID)。但我也找不到一种方法来编写此方法的安全规则。

当前规则

// Usernames

match /Social/Usernames {
    allow get: if request.auth.uid != null;
    allow update: if isUserNameAvailable();
}

// Functions

function isUserNameAvailable() {
    // This line works
    return (request.writeFields.hasOnly([request.auth.uid]))

    // This one doesn't
        && !(resource.data.values().hasAny([request.writeFields[request.auth.uid]]));
}

Firestore数据结构

enter image description here

非常感谢您的帮助,非常感谢!

0 个答案:

没有答案