Firebase 访问规则中文档ID的第一个字符

Firebase 访问规则中文档ID的第一个字符,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我希望获取文档ID,并将该ID的前X个字符与字符串进行比较,以便特定UID可以访问具有该前缀的所有文档 暂时忽略前缀,我尝试使用比较完整文档ID,但在客户端应用程序中收到的权限被拒绝。权限是通过比较request.auth.uid授予的,这样它就不是客户端问题了 service cloud.firestore { match /databases/{database}/documents { match /collectionA/{x} { allow read:

我希望获取文档ID,并将该ID的前X个字符与字符串进行比较,以便特定UID可以访问具有该前缀的所有文档

暂时忽略前缀,我尝试使用比较完整文档ID,但在客户端应用程序中收到的权限被拒绝。权限是通过比较
request.auth.uid
授予的,这样它就不是客户端问题了

service cloud.firestore {
  match /databases/{database}/documents {
     match /collectionA/{x} {
        allow read: if request.auth.uid == 'ABCD1234' && resource.id == '00153@1529943514.26';
    }
  }
}

对于您的规则,
x
是文档id字符串,因此您可以将其与resource.id进行比较(可能尚未确定用户是否有权访问资源的任何属性)

你有很多方法来检查一个链接的内容(一定要阅读该链接)

可以使用索引语法提取子字符串:

x[0:2] == 'abc'  // the first three characters of the string x
您还可以使用应用正则表达式来检查字符串的开头:

x.matches('^prefix.*') == true

对于您的规则,
x
是文档id字符串,因此您可以将其与resource.id进行比较(可能尚未确定用户是否有权访问资源的任何属性)

你有很多方法来检查一个链接的内容(一定要阅读该链接)

可以使用索引语法提取子字符串:

x[0:2] == 'abc'  // the first three characters of the string x
您还可以使用应用正则表达式来检查字符串的开头:

x.matches('^prefix.*') == true

我已将规则修改为使用
x
而不是
resource.id
,并且仍然拒绝接收权限。使用名为“test”的全新空白文档进行测试,但仍被拒绝。仅测试了身份验证,并授予了权限。文档ID是Firestore中显示的名称,对吗?您是从客户端应用程序进行测试还是在控制台中使用规则模拟器?我已将规则修改为使用
x
,而不是
resource.ID
,并且仍然拒绝接收权限。使用名为“test”的全新空白文档进行测试,但仍被拒绝。仅测试了身份验证,并授予了权限。文档ID是Firestore中显示的名称,对吗?您是从客户端应用程序进行测试还是在控制台中使用规则模拟器?