Одним из решений является наличие определенных узлов базы данных, перечисляющих ваших пользователей, следующим образом:
{
"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
}
}
}
Однако в вашей модели данных возникнет проблема, поскольку вы создаете несколько stores
в качестве базы данных.корневые узлы.Каждый раз, когда вы создаете новое хранилище, вам необходимо обновлять правила безопасности!
Вам необходимо создавать эти хранилища в родительском узле, например, stores
.Следовательно, с новыми узлами readUsers
и readWriteUsers
ваша база данных будет выглядеть следующим образом:
- 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
}
}
}
Обратите внимание, что, как объяснено здесь , каскад правил чтения и записи:
Если правило предоставляет разрешения на чтение или запись по определенному пути, то оно также предоставляет доступ ко всем дочерним узлам в нем..