【问题标题】:Dynamic Firestore rules?动态 Firestore 规则?
【发布时间】:2019-08-14 10:07:27
【问题描述】:

动态 Firestore 规则?

我有 2 个集合,我控制访问但授予 customClaim。现在,如果我有越来越多的收藏规则会变长。

示例

服务云.firestore { 匹配 /databases/{database}/documents { 匹配 /india/{documentID} { 允许读,写:如果 request.auth.token.india_admin == true 允许读取:如果为真 } } 匹配 /databases/{database}/documents { 匹配 /japan/{documentID} { 允许读,写:如果 request.auth.token.japan_admin == true 允许读取:如果为真 } } }

有没有办法通过使用 collection 名称变量

概括

【问题讨论】:

  • 我不太确定你想在这里完成什么。您可以在规则的集合名称中使用通配符来创建可用于匹配规则中的自定义声明的变量。那是你想要做的吗?如果您更具体地说明要保护的内容以及要保护的条件,这可能会有所帮助。
  • 我有很多收藏,我将为某些用户拥有 ${collection}.admin 自定义声明。现在,我不想为每个集合编写硬编码规则,而是编写集合可变的单个规则
  • 道格·史蒂文森 - 是的,你正确地捕捉到了我的意图
  • 您能否使用仅适用于一个集合的示例来编辑您的问题,以便我们可以具体了解您要做什么?
  • request.auth.tokenMap。我看不到一种方法可以在其中查找带有连接字符串的键。

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


【解决方案1】:

您现在正在执行的操作允许对所有内容进行无条件读取访问。这就是allow read: if true 所做的。

试试这个,使用通配符作为集合名称:

match /{country}/{documentID} {
  allow read, write : if request.auth.token[country + "_admin"] == true;
}

请注意,这具有应用于您所有顶级收藏的副作用,即使是那些不代表国家/地区的收藏。如果您使用需要不同规则的其他顶级集合,您可能希望将所有特定国家/地区的集合推送到单个顶级集合下的子集合中。

【讨论】:

    猜你喜欢
    • 2018-11-25
    • 2019-01-15
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多