gpt4 book ai didi

java - 如何从 Firebase 身份验证和数据库授予对特定 UID 的读/读/写访问权限

转载 作者:行者123 更新时间:2023-12-02 10:08:51 27 4
gpt4 key购买 nike

我一直在努力从最近的研究中理解如何向系统中的某些用户授予不同的访问级别。我希望能够授予一个用户读取访问权限,并授予另一个用户读取/写入引用其 uid 的权限。落实这一举措需要开展哪些工作?

我是否需要重组我的数据库以及我的 JSON 规则是如何构建的?

enter image description here

enter image description here

更新 - 实现新规则和数据库结构

商店 01 的当前数据库引用 -

database = FirebaseDatabase.getInstance().getReference("stores").child("Store 01").child("Task List"); //Find the Task List table in database and making a reference.

将规则结构更新为以下内容

{
"rules": {

"stores": {
".read": "auth != null && (root.child('readUsers').hasChild(auth.uid) || root.child('readWriteUsers').hasChild(auth.uid))",
".write": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)"
},

"readUsers": {
".read": "auth != null && root.child('readUsers').hasChild(auth.uid)",
".write": false
},


"readWriteUsers": {
".read": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)",
".write": false
}

}}

将数据库结构更新为以下内容

enter image description here

最佳答案

一种解决方案是让一些特定的数据库节点列出您的用户,如下所示:

{
"rules": {

"Store01": {
".read": "auth != null && (root.child('readUsers').hasChild(auth.uid) || root.child('readWriteUsers').hasChild(auth.uid))",
".write": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)"
},

"readUsers": {
".read": "auth != null && root.child('readUsers').hasChild(auth.uid)",
".write": false
},


"readWriteUsers": {
".read": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)",
".write": false
}

}
}

但是,对于您的数据模型,将会出现问题,因为您正在创建多个存储作为数据库根节点。每次创建新商店时,您都需要更新安全规则!

您需要在父节点中创建这些商店,例如商店。因此,使用新的 readUsersreadWriteUsers 节点,您的数据库将如下所示:

- task-list-for-managers
- stores
- Store01
- ....
- Store02
- ....
- readUsers
- WV0676TY67TY9: true //user Id
- PU8776TIU6543: true
- .....
- readWriteUsers
- BD563DHDV7669: true //user Id
- 87RSBE6383912: true
- .....

规则如下:

{
"rules": {

"stores": {
".read": "auth != null && (root.child('readUsers').hasChild(auth.uid) || root.child('readWriteUsers').hasChild(auth.uid))",
".write": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)"
},

"readUsers": {
".read": "auth != null && root.child('readUsers').hasChild(auth.uid)",
".write": false
},


"readWriteUsers": {
".read": "auth != null && root.child('readWriteUsers').hasChild(auth.uid)",
".write": false
}

}
}

请注意,正如所解释的 here 、读写规则级联:

If a rule grants read or write permissions at a particular path, then it also grants access to all child nodes under it.

关于java - 如何从 Firebase 身份验证和数据库授予对特定 UID 的读/读/写访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55144125/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com