Как только вы предоставляете пользователю права на чтение или запись на узле, они получают это разрешение на все данные в этом узле. Вы не можете забрать разрешение на более низком уровне. В документации это упоминается в разделе каскад правил .
. На верхнем уровне ваших правил вы предоставляете пользователям это разрешение:
".read": "auth !== null",
".write":"auth !== null",
С учетом приведенного выше объясненияэто означает, что любой зарегистрированный пользователь имеет доступ на чтение / запись ко всей базе данных. Любые правила чтения / записи, которые у вас есть на более низких уровнях, просто игнорируются.
Поэтому первым шагом будет удаление этих правил доступа верхнего уровня.
Далее вы хотитепозволить пользователям иметь возможность читать проект, только если они создали этот проект. В правилах это будет:
"projects": {
".indexOn": ["createdBy"],
"$projectid": {
".read": "auth.uid == data.child('createdBy').val()"
}
}
При этом пользователь может читать /projects/myproject
, если он создал myproject
.
Обратите внимание, что с вышеуказанными правилами, ни один пользователь не можетчтение из /projects
, поскольку вы никому не предоставляете права на чтение на этом узле. Безопасность Firebase не фильтрует никакие данные от вашего имени, они просто проверяют, разрешена операция или нет. Подробнее об этом см. В документации по правилам, а не фильтрам .
Если вы хотите, чтобы пользователь мог выполнить запрос, который получает все созданные им проекты, вы 'Вам понадобятся две вещи:
Запрос, запрашивающий только эти проекты.
ref.orderByChild("createdBy").equalTo(uid)
Правило /projects
, позволяющее только этоquery.
"projects": {
".read": "auth.uid != null &&
query.orderByChild == 'createdBy' &&
query.equalTo == auth.uid"
}
Так что теперь вы разрешаете чтение /projects
только тогда, когда оно выполнено с запросом, который запрашивает только те проекты, которые пользователь создал сам. Таким образом, правила безопасности и код работают вместе, чтобы гарантировать, что пользователь получает только те данные, которые ему разрешено читать.
Подробнее об этой последней теме см. Документацию по правилам на основе запросов .