我对 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。而且,如果不是新书,那就是他拥有的书。
关于android - Firebase:如何授予添加新节点的权限,但只有所有者才能修改它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43242268/