Firestore安全规则,以检查角色用户名是否已存在

时间:2018-08-25 10:35:52

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

我在数据库(firestore)中具有以下字符收集结构

/characters/{uid}
 - username: string
 - clan: string
 - mana: number
 - health: number
 etc...

我正在尝试通过以下逻辑找出/characters/{uid}的安全规则

service cloud.firestore {
  match /databases/{database}/documents {

    // Characters
    match /characters/{characterID} {
      allow create: if isValidUsername();
    }
  }
}

这里的函数isValidUsername检查各种内容,例如长度,特殊字符等...但是我不知道的一件事是如何检查函数内部的跟随情况

请确保request.resource.data.username是唯一的,即在/characters集合的任何其他文档中都没有。

1 个答案:

答案 0 :(得分:2)

TL; DR:只有创建额外的集合才能执行唯一性。

在当前结构中,要知道用户名是否唯一,您将需要阅读每个文档。这效率极低,最重要的是,在安全规则中这是不可能的,因为每个规则只能读取几个文档。

诀窍是创建一个额外的集合usernames,在该集合中您还为每个用户提供了一个文档,但是现在每个文档的键/ ID是用户名。使用这样的集合,您可以检查某个文档的存在,这是安全规则中的原始操作。

相关问题