到目前为止,我一直在使用此规则配置
{
"rules": {
"items": {
".read" : true,
"$uid": {
".read" : true,
".write": "auth != null && auth.uid == $uid"
}
}
}
}
验证和其他目录被省略。/ items / user1 / item1 / 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
如果不能将规则应用于每个项目,如何建立具有不同所有者的项目目录?
您只能使用来处理此问题/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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句