Firebase实时数据库规则(所有规则都可以读取,但只能编辑所有者)
到目前为止,我一直在使用这个规则配置Firebase实时数据库规则(所有规则都可以读取,但只能编辑所有者),firebase,firebase-realtime-database,nosql,Firebase,Firebase Realtime Database,Nosql,到目前为止,我一直在使用这个规则配置 { "rules": { "items": { ".read" : true, "$uid": { ".read" : true, ".write": "auth != null && auth.uid == $uid" } } } } 省略了验证和其他目录。 /items/user1/item1 /items/user2/item1 所有可读取项目
{
"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": {},
}
}
但这似乎不是一个好主意
规则是以原子的方式应用的。这意味着读或写
如果该位置没有规则,操作将立即失败
或者在授予访问权限的父位置。即使每个人都受到影响
子路径可访问,在父位置读取将失败
完全是。
如果无法为每个项目应用规则,如何构建具有不同所有者的项目目录?您只能使用
/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)"
}
}
}
}
上述规则是一种可能的解决方案。我们允许任何人阅读项目
中的所有内容。但只有拥有该项目的用户(/itemId/uid
)才能创建/编辑该项目。此外,我们还强制新的或编辑的项目具有用户id