如何在firebase中限制字符串长度

0md85ypi  于 2023-03-09  发布在  其他
关注(0)|答案(3)|浏览(166)

我在一个firebase数据库中工作。我需要限制字符串字段的长度。我该怎么做呢?
字段的路径为:
列1/文档1///描述
也就是说,从集合col 1开始,然后进入doc 1,然后对于doc 1下的所有集合以及该集合下的所有文档,description字段需要限制为100个字符。
有人能给我解释一下怎么做吗?谢谢

yrwegjxp

yrwegjxp1#

我试着从另一个答案中得到验证,但是没有成功。Firestore只是不喜欢检查资源数据值的.length。
我四处寻找,这篇文章帮了我:https://fireship.io/snippets/firestore-rules-recipes/

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
      match /posts/{postId} {
        allow read: if true;
        allow write: if request.auth != null 
                     && request.auth.uid == request.resource.data.uid
                     && request.resource.data.body.size() > 0
                     && request.resource.data.body.size() < 255
                     && request.resource.data.title.size() > 0
                     && request.resource.data.title.size() < 255;
      }
  }
}
frebpwbc

frebpwbc2#

对于Cloud Firestore,您可以使用以下命令 * 验证 * description字段不超过100个字符:

service cloud.firestore {
  match /databases/{database}/documents {
    match /col1/doc1 {
      allow write: if resource.data.description.length <= 100;

        match /subcollection1/{doc=**} {
          allow  write: if resource.data.description.length <= 100;
        }
    }
  }
}

这适用于col1/docsubcollection1中的所有文档。请注意,这些规则不会限制说明的长度,因为安全规则不能修改写入的数据。相反,规则会拒绝说明长度超过100个字符的写入。
(据我所知)没有办法只对一个文档的 * 每个 * 子集合应用规则,我所知道的最接近的方法是对所有文档及其子集合应用规则:

match /col1/(document=**} {
  allow write: if resource.data.description.length <= 100;
}

这将验证应用于col1中的所有文档及其下的所有子集合。

pieyvz9o

pieyvz9o3#

在Firebase文档中,特别是对于Firestore,似乎可以使用Map接口的get()函数。
例如:

service cloud.firestore {
    match /databases/{database}/documents {
        match /{document=**} {
            allow read: if true;
            allow write: if request.resource.data.get('description', '').size() < 256;
        }
    }
}

截至2023年2月的文档可在此处找到

相关问题