将 contains() 与 firebase 规则一起使用
Using contains() with firebase rules
我正在尝试使用以下文档在 Firestore 中设置自定义规则:https://firebase.google.com/docs/reference/security/database/#containssubstring
我为此使用自定义声明。
什么有效:
match /calendar/{calendar} {
allow read: if request.auth.token.customData == "calendar-read,calendar-write";
}
什么不起作用,我不知道为什么:
match /calendar/{calendar} {
allow read: if request.auth.token.customData.contains("calendar-read");
}
这会给我:“FirebaseError:权限缺失或不足”
由于您使用的是 Firestore,因此您应该使用 Firestore String 的 API 文档,而不是实时数据库字符串。您会看到 Firestore 字符串没有名为“contains”的方法。
如果要检查字符串中是否包含子字符串,应改用matches(),并提供匹配的正则表达式。
allow read: if request.auth.token.customData.matches(".*calendar-read.*");
如果 request.auth.token.customData
在其中的任何位置包含字符串“calendar-read”,则以上内容应该 return 为真。
如果您使用的是逗号分隔的值列表,请考虑使用 split() and list.hasAny() 来更清楚。
我正在尝试使用以下文档在 Firestore 中设置自定义规则:https://firebase.google.com/docs/reference/security/database/#containssubstring
我为此使用自定义声明。
什么有效:
match /calendar/{calendar} {
allow read: if request.auth.token.customData == "calendar-read,calendar-write";
}
什么不起作用,我不知道为什么:
match /calendar/{calendar} {
allow read: if request.auth.token.customData.contains("calendar-read");
}
这会给我:“FirebaseError:权限缺失或不足”
由于您使用的是 Firestore,因此您应该使用 Firestore String 的 API 文档,而不是实时数据库字符串。您会看到 Firestore 字符串没有名为“contains”的方法。
如果要检查字符串中是否包含子字符串,应改用matches(),并提供匹配的正则表达式。
allow read: if request.auth.token.customData.matches(".*calendar-read.*");
如果 request.auth.token.customData
在其中的任何位置包含字符串“calendar-read”,则以上内容应该 return 为真。
如果您使用的是逗号分隔的值列表,请考虑使用 split() and list.hasAny() 来更清楚。