【发布时间】:2020-05-26 20:38:19
【问题描述】:
我有一个要求,用户只能写入他们在 RT 数据库中的帐户节点。通常这会起作用:
"accounts": {
"$uid": {
".write": "$uid === auth.uid",
".read": "$uid === auth.uid"
},
但是,要求是来自 Authentication 的 uid 存储在以“US_”为前缀的“accounts”中。
所以,我试过这个:
"accounts": {
"$uid": {
".write": $uid.matches(/^US_/) + "auth.uid",
".read": "$uid === auth.uid"
},
还有这个:
"accounts": {
"$uid": {
".write": "$uid === /^US_/auth.uid",
".read": "$uid === auth.uid"
},
第二个似乎更接近工作,错误是:
保存规则时出错 - 第 44 行:正则表达式后的标志无效
我想知道这是否可能?
更新
这解析正确,但似乎不起作用(我无法让规则通过):
"accounts": {
"$uid": {
".write": "$uid === 'US_' + 'auth.uid'",
".read": "$uid === auth.uid"
},
},
数据库结构
accounts:
uid: "US_blah",
createdAt: <datetime>,
username: "MickeyMouse"
【问题讨论】:
-
"Authentication 的 uid 存储在 "accounts" 中,前缀为 "US_" -> 你能展示一下你的数据库结构是如何与这个语句对应的吗?
-
@RenaudTarnec 添加到问题的末尾
-
谢谢。可以肯定的是,
username是否与uid处于同一级别?或者它是它的孩子之一? -
@RenaudTarnec 感谢您的快速回复,但我设法弄清楚了:)
标签: firebase firebase-realtime-database firebase-security