简单问题:
如何限制路径,例如......
/orders/<userid>
/cart/<userid>
/transactions/<userid>/txid
...仅限userid
匹配路径中的用户的用户?
我已设置身份验证,我需要在firebase.auth().onAuthStateChanged
之后在Vue中订阅其中一些
根据此处的文档,在以下规则示例中,用户令牌必须与密钥完全匹配:
{
"rules": {
"users": {
"$user_id": {
// grants write access to the owner of this user account
// whose uid must exactly match the key ($user_id)
".write": "$user_id === auth.uid"
}
}
}
}
这是否意味着,/orders/123456/order123478
将受到限制且仅供用户123456
使用?
答案 0 :(得分:1)
对于实时数据库,请将规则更新为以下内容:
{
"rules": {
"orders": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
}
}
}
$uid
键表示嵌套在该级别的任何键,并允许您在规则中引用它。 auth
变量由Firebase提供,其中包含有关发出请求的经过身份验证的用户的详细信息,因此您可以将请求用户的uid
与数据库的uid
密钥进行比较,并在它们匹配时授予权限(嵌套的".read"
和".write"
值)。
因此,对于uid
为user1
的用户,他们可以访问以下数据:
{
"orders": {
"user1": {
"order1": read/write,
"order2": read/write
},
"user2": {
"order1": no access,
"order2": no access
},
"user3": {
"order1": no access,
"order2": no access
},
}
阅读documentation并使用Firebase信息中心规则部分中的模拟器。