2013-07-22 13 views
5

Obecnie mam prostą aplikację todo, dzięki której użytkownicy mogą tworzyć listy, a następnie odhaczyć elementy tak, jak zrobiono. Dane mają następującą strukturę: "/ acc_" + USER_ID + "/ done" i "/ acc_" + USER_ID + "/ todo". Gdy elementy są "gotowe", są przenoszone do ukończonej listy.Jak uporządkować dane Firebase i zasady udostępniania danych między użytkownikami?

Chciałbym, aby użytkownik mógł udostępnić listę innym uwierzytelnionym użytkownikom.

Zasady obecnie wyglądają jak następujące, które wydają się działać.

{ 
    "rules": { 
     "$userPath": { 
      ".read": "auth != null", 
      ".write": "auth != null", 
      ".validate": "$userPath === 'acc_' + auth.id" 
     } 
    } 
} 

Co myślę, że musisz zrobić, to mieć każdy użytkownik posiadający tablicę zatwierdzonych adresów e-mail, który jakoś zaczepić do zasad bezpieczeństwa.

Alternatywnie mógłbym utworzyć listę w katalogu głównym i mieć dostęp do niej tylko przez twórcę i współdzielonych użytkowników.

Jakieś wskazówki?

Odpowiedz

1

Ponieważ użytkownik decyduje, komu chce udostępnić listę, zapisałbym te informacje w samych danych użytkownika. Na przykład:

{ 
    "rules": { 
    "$userPath": { 
     ".write": "$userPath == 'acc_' + auth.id", 
     ".read": "$userPath == 'acc_' + auth.id || root.child($userPath).child('shared').hasChild(auth.id)" 
    } 
    } 
} 

a następnie zapisać listę użytkowników dane są udostępnione w acc_userid/shared/

+0

nie miałem dużo szczęścia z powyższymi zasadami. Wydawało się, że to działa, ale "acc_" + auth.id '/ shared "jest tablicą, w której pierwszy wpis to ten, do którego chcę mieć dostęp. Chociaż z perspektywy czasu nie wydaje się to dobrym rozwiązaniem. Myślę, że moje problemy z architekturą aplikacji są głębokie. { "zasady": { "$ userPath": { ".write": "$ userPath ==" acc_ '+ auth.id || root.child ($ userPath) .child ("udostępnione"). child ('0') val() == auth.email ", " .read ":" $ userPath == "acc_ '+ auth.id || root.child ($ userPath) .child (' shared ') .child ("0"). val() == auth.email " } } } – defmech

+0

więc czy znalazłeś jakieś dobre rozwiązanie? – jujule

Powiązane problemy