Firebase 实时规则
Posted
技术标签:
【中文标题】Firebase 实时规则【英文标题】:Firebase RealTime Rules 【发布时间】:2021-12-18 04:01:15 【问题描述】:我的应用有一个管理面板,我想设置 firebase 规则,以便只有管理员可以在某些 firebase.Child 中放置新产品或项目
我希望孩子中唯一的用户(“管理员”)将被允许写入其他类别,如工作、私人、视频,那么如何让来自像管理员这样的参考的孩子只能访问其他孩子?
这是我当前的 firebase-RealTime 规则。
"rules":
"Admins":
".read": true,
".write": false
,
"Users":
".read": true,
".write": true,
".validate": "newData.hasChildren(['name', 'phoneNumber', 'uid'])",
"name": ".validate": true,
"phoneNumber": ".validate": true,
"uid": ".validate": true,
"$other": ".validate": false
,
"PrivateWork":
".read": "auth.uid != null",
".write": false
,
"Likes":
".read": "auth.uid != null",
".write": "auth.uid != null"
,
"Work":
".read": "auth.uid != null",
".write": false
,
"videos":
".read": "auth.uid != null",
".write": false
【问题讨论】:
【参考方案1】:要允许管理员全局写入权限,您可以像这样添加一个***规则:
"rules":
".write": "root.child('Admins').child(auth.uid).exists()",
"Admins":
...
由于permission cascades downwards,这也将授予他们对所有子节点的访问权限。
【讨论】:
谢谢。正如预期的那样,你总是回答得很快,如果可能的话,另一个小问题是正确的方法让“用户”孩子的阅读成为真实,我试图让它 auth.uid != null 所以只有授权才能看到用户信息,但是如果我这样做了,我将无法登录,因为登录前没有身份验证 登录是对 Firebase 身份验证的调用,因此应该如此。根据数据库中的规则不会失败。如果您无法使其正常工作,我建议您使用自己的MCVE 发布一个单独的问题。 true 我可以登录但我不能注册新用户 我刚刚尝试过,但它没有工作 firebase 仍然给我权限被拒绝错误,是因为我覆盖了规则,在每个孩子说假之后? 权限向下级联。一旦您授予用户在根目录下的读取权限,他们就可以读取整个数据库。现在有办法撤销它。如果用户没有权限,则当您尝试从数据库中读取数据时,他们要么尚未登录,要么他们的 UID 未作为密钥存储在Admins
节点中。以上是关于Firebase 实时规则的主要内容,如果未能解决你的问题,请参考以下文章