Firebase:如何授予添加新节点的权限,但只有所有者才能修改它们?
Firebase: How to grant permission to add new nodes but only the owner can modify them?
我对 Firebase 规则有疑问。
我只想向经过身份验证的用户授予对书籍节点的写入权限(添加新书)。另外,我希望只有书的所有者才能修改一本书。这是我的数据库和我的规则:
o- books
o- book1
o- owner : user1
o- name : nice book
o- pages { ... }
o- users { ... }
o- book2
o- owner : user2
o- name : other book
o- pages { ... }
o- users { ... }
这里是规则
{
"rules": {
"books": {
".write": "auth != null",
"$bookId": {
".read": "data.child('users').hasChild(auth.uid)",
"pages" : {
".write": "data.child('owner').val() == auth.uid"
}
}
}
}
}
问题是在 /books/book1
中使用经过身份验证的 user2
授予写入操作,因为第一个写入 (auth != null)
是真实的...
感谢任何帮助,
非常感谢。
当您在 books
分支下设置写入权限时,您将授予用户写入权限以写入其下的任何数据。所以我猜你正在寻找类似以下的东西:
{
"rules": {
"books": {
"$bookId": {
".write": "newData.child('owner').val() == auth.uid && (!data.exists() || data.child('owner').val() == auth.uid)",
".read": "data.child('users').hasChild(auth.uid)"
}
}
}
}
这将确保用户所做的任何更改都将包含他的 uid。还有,如果不是新书,就是他的书。
我对 Firebase 规则有疑问。
我只想向经过身份验证的用户授予对书籍节点的写入权限(添加新书)。另外,我希望只有书的所有者才能修改一本书。这是我的数据库和我的规则:
o- books
o- book1
o- owner : user1
o- name : nice book
o- pages { ... }
o- users { ... }
o- book2
o- owner : user2
o- name : other book
o- pages { ... }
o- users { ... }
这里是规则
{
"rules": {
"books": {
".write": "auth != null",
"$bookId": {
".read": "data.child('users').hasChild(auth.uid)",
"pages" : {
".write": "data.child('owner').val() == auth.uid"
}
}
}
}
}
问题是在 /books/book1
中使用经过身份验证的 user2
授予写入操作,因为第一个写入 (auth != null)
是真实的...
感谢任何帮助, 非常感谢。
当您在 books
分支下设置写入权限时,您将授予用户写入权限以写入其下的任何数据。所以我猜你正在寻找类似以下的东西:
{
"rules": {
"books": {
"$bookId": {
".write": "newData.child('owner').val() == auth.uid && (!data.exists() || data.child('owner').val() == auth.uid)",
".read": "data.child('users').hasChild(auth.uid)"
}
}
}
}
这将确保用户所做的任何更改都将包含他的 uid。还有,如果不是新书,就是他的书。