Gaa*_*mit 5 firebase firebase-security firebase-realtime-database
我想只有 user2,user3才能从DB而不是用户4 查看user1的信息.
我知道我需要在JSON规则中做一些事情:
当User1允许通过应用程序获得权限时,UIDUser2,UIDUser3将替换为实际ID.
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止这是我的编辑:
{
"rules": {
"Users":{
"UIDHERE":{
".read": auth.uid ==??
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何完成规则?我想从Allowed
区域检索钥匙到这里?
因此,您只希望其ID在Allowed
节点中的用户读取其他用户信息.对?
如果是这样......这是规则.
"Users": {
"$uid": {
".read": "root.child('Users/Allowed/'+auth.uid).exists()"
}
}
Run Code Online (Sandbox Code Playgroud)
[更新]
$uid
是一个$ variables的例子(你可以给它不同的名字但它必须以$开头),它动态获取Users
位置下的key值.
例如:我给你的规则只允许Allowed
节点下的用户读取其他用户信息,但如果该用户不在Allowed
节点中,它将阻止用户读取自己的信息.如果你想添加它,你需要改变这样的规则.
"Users": {
"$uid": {
".read": "$uid == auth.id || root.child('Users/Allowed/'+auth.uid).exists()"
}
}
Run Code Online (Sandbox Code Playgroud)
================================================== =======================
在火力规则有预定义变量,例如,now
,root
,auth
,data
,newData
和$变量.
如果规则结构中有$ location,则可以在规则表达式中使用匹配的$变量来获取正在读取或写入的实际子项的名称.因此,假设我们希望为每个用户提供对其自己/用户/位置的读写访问权限.我们可以使用:
从firebase文档https://firebase.google.com/docs/reference/security/database/#location复制
如果您想了解有关firebase安全规则的更多信息,请阅读以下部分.
https://firebase.google.com/docs/database/security/
你的结构不太好.Users
节点下的数据是混乱的.您不应该将Allowed
节点与userIds放在同一级别上.相反,如果您allowedUsers
在Users
节点级别创建新的node()并在Allowed
那里移动数据会更好.
AllowedUsers
- userid2
- userid3
Users
- userid1
- userid2
- userid3
- userid4
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1522 次 |
最近记录: |