我们可以在Firebase数据库规则中使用通配符吗?从我的实验来看,情况似乎并非如此。我错过了什么或是应该发生什么?
因此,例如,我可能对所有products_*
条目具有相同的规则,并且使用通配符将它们组合在一起会更容易。
为了澄清,它是一个Web应用程序,我关心我们在控制台中设置的数据库权限。我们可以在那里使用通配符吗?
例如,
{
"rules": {
"products_A": {
<rules>
},
"products_B": {
<rules>
}
}
我想只有一套规则,如:
{
"rules": {
"products_*": {
<rules>
}
}
感谢。
答案 0 :(得分:9)
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