toa*_*sty 4 nosql firebase firebase-realtime-database
到目前为止,我一直在使用此规则配置
{
"rules": {
"items": {
".read" : true,
"$uid": {
".read" : true,
".write": "auth != null && auth.uid == $uid"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
验证和其他目录被省略。/ items / user1 / item1 / items / user2 / item1
全部可以读取项目目录和所有用户项目(无私有项目)
我需要什么?
平面项目
"items" : {
"item1": {},
"item2": {}
}
Run Code Online (Sandbox Code Playgroud)
以userId作为属性
"item1" : {
"uid": "userId"
}
Run Code Online (Sandbox Code Playgroud)
只有用户创建的项目可以编辑/删除,但所有人都可以看到。
我在考虑不同目录中的重复项,例如
"public_items": {
"item1": {},
"item2": {}
}
"items": {
"userId": {
"item1": {},
"item2": {},
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不是一个好主意。
规则以原子方式应用。这意味着,如果该位置或父位置没有授予访问权限的规则,则读取或写入操作将立即失败。即使可以访问每个受影响的子路径,在父位置的读取也将完全失败。 https://firebase.google.com/docs/database/security/securing-data#read_and_write_rules_cascade
如果不能将规则应用于每个项目,则如何用不同的所有者构建项目目录?
您只能使用来处理此问题/items/itemId/uid。
{
"rules": {
"items": {
".read" : true,
"$itemId": {
".write": "(!data.exists() && newData.child('uid').val() == auth.uid ) || (data.child('uid').val() == auth.uid && newData.child('uid').val() == auth.uid)"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
以上规则是一种可能的解决方案。我们允许任何人阅读其中的所有内容items。但只有拥有项目(/itemId/uid)的用户才能创建/编辑。另外,我们强制新的或编辑的项目具有用户ID。
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |