Firebase 数据库规则中的通配符
Posted
技术标签:
【中文标题】Firebase 数据库规则中的通配符【英文标题】:Wildcard in Firebase database rules 【发布时间】:2017-04-30 20:35:03 【问题描述】:我们可以在 Firebase 数据库规则中使用通配符吗?从我的实验来看,情况似乎并非如此。我错过了什么还是应该发生的事情?
因此,例如,我可能对所有 products_*
条目有相同的规则,使用通配符将它们组合在一起会更容易。
为了澄清,它是一个网络应用程序,我关心的是我们在控制台中设置的数据库权限。我们可以在那里使用通配符吗?
例如,
"rules":
"products_A":
<rules>
,
"products_B":
<rules>
我希望只有一组规则,例如:
"rules":
"products_*":
<rules>
谢谢。
【问题讨论】:
请以文本形式发布您的规则,不要使用图片以及您尝试通过通配符完成的工作,因为可能有解决方案。 @Jay,更新澄清! 我发布了一个了不起的答案,但是因为我突然忘记了如何阅读它,所以这个问题完全错误。在那张纸条上......仍然不清楚这个问题在问什么 - 大多数firebase规则使用占位符来引用封闭的父节点。也许您可以发布您当前的规则并描述您的目标。 感谢您的时间和帮助。澄清了我的问题。 【参考方案1】:Firebase 提供用于表示 ID 和动态子键的通配符路径。例如,以下规则中的 $uid 是一个“通配符”,它允许该节点内的参数引用父节点。
"rules":
"users":
"$uid":
".write": "$uid === auth.uid"
在上面的示例中,$uid 是 /users 节点中每个用户节点的通配符路径。以下是上述规则在每个节点上的扩展方式
users
uid_0 <--------|
V
".write": "uid_0 === auth.uid" //only user with uid = uid_0 can write
uid_1
".write": "uid_1 === auth.uid" //only user with uid = uid_1 can write
uid_2
".write": "uid_2 === auth.uid" //only user with uid = uid_1 can write
您可以对此进行扩展以提供更大的灵活性。假设您希望一组用户能够访问组节点。组规则可以是
"rules":
"Groups":
"$group_id" :
".read": "root.child('Allowed_Users/' + auth.uid).val() === $group_id",
".write": "root.child('Allowed_Users/' + auth.uid).val() === $group_id"
这会将每个组节点的访问权限限制在 Allowed_Users 节点中指定的特定用户集。 Firebase 数据库中的数据可能如下所示:
Groups
group_0
//data
group_1
//data
Allowed_Users
uid_0: group_0
uid_1: group_0
在这个例子中,用户 uid_0 和 uid_1 可以读/写 group_0 但不能读/写 group_1
【讨论】:
以上是关于Firebase 数据库规则中的通配符的主要内容,如果未能解决你的问题,请参考以下文章