2016-12-15 70 views
0

我们能否使用火力地堡数据库规则通配符?从我的实验来看,似乎并非如此。我错过了什么或者是应该发生什么?通配符在火力地堡数据库规则

所以,举例来说,我可能对所有products_*项相同的规则,它会更容易在一起使用通配符组。

要澄清,这是一个web应用程序,我关心的是,我们在控制台设置数据库权限。我们可以在那里使用通配符吗?

例如,

{ 
"rules": { 
    "products_A": { 
     <rules> 
    }, 
    "products_B": { 
     <rules> 
    } 
} 

我想只有1套,喜欢的规则:

{ 
"rules": { 
    "products_*": { 
     <rules> 
    } 
} 

感谢。

+2

安置自己的规则文本请,没有图像以及你试图通过通配符完成的事情,因为可能有解决方案。 – Jay

+0

@Jay,澄清更新! – Ahsan

+2

我发布了一个奇妙的答案,但因为我突然忘记了如何阅读它是完全错误的问题。在那个笔记上......现在还不清楚问题的症结所在 - 大多数firebase规则使用占位符来引用封闭的父节点。也许你可以发布你当前的规则,并描述你在做什么。 – Jay

回答

5

火力地堡提供用于表示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节点中指定的某个用户组。在火力地堡数据库中的数据可能看起来像:

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