【问题标题】:Convert a Firestore Security Rules Set() to a String value(s)将 Firestore 安全规则集 () 转换为字符串值
【发布时间】:2020-04-17 00:55:32
【问题描述】:

根据 Firestore 安全规则文档,使用 affectedKeys() MapDiff 函数将返回 rules.Set()

function getName() {
  return ({"alice":"owner", "john":"writer"}).diff({"john":"writer"}).affectedKeys();
}

在上面的示例中,["alice"] 将从函数返回,但作为 Set 类型,而不是 List 类型。

我需要将返回的值转换为字符串 ("alice") 而不是 Set,但到目前为止我无法找到一种方法来做到这一点。有没有可能做到这一点?

【问题讨论】:

  • 根据提供的代码,返回的集合实际上是["alice", "bob"]
  • getName() 的目的是什么?你想用它创建什么规则?
  • 在 v2 的 firestore 安全规则中,允许使用let 来分配变量。我希望为返回的getName() 键分配一个字符串值,并将其用于其他数据验证目的。
  • 这并没有完全回答我提出的问题 - 假设你有一些规则,需要名字“alice” - 你可以使用 "alice" in getNames()getNames().hasAny(["alice"]) 因为 name == "alice" 将是在这种情况下无效。
  • 我计划使用返回的值通过get() 访问其他地方的嵌套映射子键。 getName() 的返回值将始终是单个键名,但我不知道它的值是什么。确实,如果我知道价值,我可以按照您的说法对其进行测试。情况并不理想,但这是我的情况。

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


【解决方案1】:

如果您可以将 Set 转换为 List,将会有。但如果没有这种转换,这是不可能的。我建议向Firebase support 提交功能请求。

【讨论】:

  • 谢谢你,道格。这令人失望,但很有帮助。至少我现在知道我可以停止寻找现有的解决方案了。
  • 我几天前已填写此请求...将在此处删除我的重复问题
  • 第二次请求设置为列表。一个很好的用例是总结用户(可能按文件夹)上传的所有存储的文档。如果我们允许他们注释该数据,我们需要一种方法来防止他们修改诸如总大小之类的东西。因此,密钥将是未知的,但我们仍想验证哪些子字段正在更新。有一些变通方法,但它们涉及以下之一:更多读取(稍后读取子集合时)、更多写入(针对单独的标志文档)或更复杂的列表器(针对同一文档中指定的写入键)。
  • @ChrisChiasson 使用答案中的链接向 Firebase 支持提交您的请求。他们没有非常仔细地将 Stack Overflow 视为需求来源。
  • @DougStevenson 是的先生,我打算这样做,但 cmets 有字符限制(所以我没有写我打算在我的原件中这样做)。
猜你喜欢
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多