到目前为止,我一直在使用此规则配置
{
"rules": {
"items": {
".read" : true,
"$uid": {
".read" : true,
".write": "auth != null && auth.uid == $uid"
}
}
}
}
验证和其他目录省略。 /项目/用户1 /条1/1 / items / user2 / item1
所有人都可以阅读项目目录和所有用户项目(没有私人项目)
我需要什么?
平面项目
"items" : {
"item1": {},
"item2": {}
}
将userId作为属性
"item1" : {
"uid": "userId"
}
只有用户创建的项目可以编辑/删除它,但所有人都可以看到它。
我在考虑不同目录中的双项,例如
"public_items": {
"item1": {},
"item2": {}
}
"items": {
"userId": {
"item1": {},
"item2": {},
}
}
但这似乎不是一个好主意。
规则以原子方式应用。这意味着读或写 如果该位置没有规则,则操作立即失败 或者在授予访问权限的父级位置。即使每一个受到影响 子路径是可访问的,在父位置读取将失败 完全。 https://firebase.google.com/docs/database/security/securing-data#read_and_write_rules_cascade
如果规则无法应用于每个项目,如何使用不同的所有者构建项目目录?
答案 0 :(得分:4)
您只能使用/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)"
}
}
}
}
以上规则是一种可能的解决方案。我们允许任何人阅读items
内的所有内容。但只有拥有该项目(/itemId/uid
)的用户才能创建/编辑。此外,我们强制新的或编辑的项目具有用户ID。