Существует ли передовой подход к правилам авторизации для защищенного контента в приложении firebase
- с использованием firepad специально
- По защищенному контенту я имею в виду, когда пользователь создает документ и делится им только с некоторыми другими пользователями).
- Также мне нужно иметь возможность запрашивать firebase для всех документов, к которым у меня есть доступ (документы, которые я создал, и другие документы, которыми я пользуюсь вместе со мной)
Некоторые из моих исследований до сих пор:
Метод 1: секретный URL
-
Мне нужно знать URL-адрес, чтобы иметь возможность просматривать/редактировать документ
-
Недействительная авторизация, так как любой зарегистрированный пользователь, имеющий доступ к этому URL, может редактировать/изменять его.
-
Невозможно указать все документы, к которым у меня есть доступ к
Способ 2: Использование правил авторизации firebase для добавления пользователей в документ и проверки того, является ли пользователь document.users перед чтением/записью.
Снято с: Возможно ли защищенный контент в Firebase?
{
"documents": {
"$documents_id": {
// any friend can read my post
".read": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()",
// any friend can edit my post
".write": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()"
},
users:{
// List of user.ids that have access to this document
}
}
}
Плюсы:
- Надлежащая авторизация/аутентификация. Только пользователи, прошедшие проверку подлинности, которым предоставлен доступ, могут просматривать/редактировать.
Минусы:
- Невозможно запросить все документы, которые пользователь может редактировать (те, которые у меня есть или были разделены со мной) (Правильно ли это предположение?)
Способ 3: правила авторизации Firebase (метод 2) плюс избыточный магазин пользователей с массивом документов, к которым имеют доступ каждый пользователь. Это хранилище пользователей будет использоваться только для запроса всех документов, к которым пользователь имеет доступ. то есть:
{
"documents": {
"$documents_id": {
// any friend can read my post
".read": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()",
// any friend can edit my post
".write": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()"
}
},
"users":{
"$user":{
".read": "auth.id=$user.id",
".write": "auth.id=$user.id"
"$documents":{
// All the documents i have access to. This list gets ammended whenever I am granted/stripped access to a document.
}
}
}
}
Плюсы:
- Надлежащая аутентификация/авторизация
Минусы:
- Повторяющиеся данные должны иметь дело с проблемами синхронизации между двумя хранилищами данных. Это просто не кажется хорошей идеей.
Метод 4: Группы
Использование групп в Предоставление доступа к местам Firebase группе пользователей
-
У нас есть группа для каждого документа в хранилище данных
-
Невозможно запросить firebase для всех документов, к которым пользователь может получить доступ.
Есть ли лучший способ сделать это?