2013-07-02 17 views
12

Powiedzmy, że mam dwa rodzaje obiektów użytkowników i kont. Użytkownicy mogą mieć wiele kont i udostępniać je innym użytkownikom. Konto A może być dostępne dla użytkowników 1 i użytkowników 2. Natomiast KontoB jest dostępne tylko dla Użytkownika 1. Tak więc Użytkownik1 ma dwa konta, a Użytkownik2 ma jedno Konto.Wiele do wielu za pomocą Firebase

Co to jest "firebase", aby to zorganizować?

Początkowo sądziłem, że użytkownicy mogą przechowywać wiele różnych kont, do których należą.

users: { 
    1: { 
    name: 'Ted', 
    accounts: [1, 2] 
    } 
    2: { 
    name: 'Frank', 
    accounts: [1] 
    } 
} 

accounts: { 
    1: { 
    name: "Checking" 
    }, 
    2: { 
    name: "Savings" 
    } 
} 

lub konto miałby układ użytkowników.

users: { 
    1: { 
    name: 'Ted' 
    } 
    2: { 
    name: 'Frank' 
    } 
} 

accounts: { 
    1: { 
    name: "Checking", 
    users: [1, 2] 
    }, 
    2: { 
    name: "Savings" 
    users: [1] 
    } 
} 

Zastanawiam się, w jaki sposób nadaje się dla mnie łatwo znaleźć konta dla użytkownika tak, że kiedy Ted loguje się mogę notować kont on należące do bez konieczności ciągnięcia w dół całą bazę danych. Ze względów bezpieczeństwa nie chcę wszystkich danych na jego komputerze.

Pytanie # 1 Czy zasady bezpieczeństwa o to zadbają? Rozumiem przez to, że planuję ustawić regułę bezpieczeństwa tak, aby użytkownicy mogli tylko do nich należeć. Mam nadzieję, że jeśli zapytam o "/ accounts", otrzymam tylko te konta, do których użytkownik ma dostęp ... nie?

Pytanie # 2 Czy istnieje mechanizm służący do sprawdzania listy przedmiotów. Na przykład "/ accounts/[1,2]", aby odzyskać konta "/ accounts/1" i "/ accounts/2"?

Dziękujemy za wszelkie informacje, które można udostępniać.

Odpowiedz

20

Przed skokiem do konkretów, istnieje kilka rzeczy, będziemy chcieli, aby pamiętać:

  1. Będziesz zazwyczaj chcą uporządkować swoje dane w oparciu o wzorce czytania. Jeśli więc musisz przejrzeć wszystkie konta, w których znajduje się użytkownik, musisz gdzieś go przechowywać. A jeśli chcesz wyszukać wszystkich użytkowników powiązanych z kontem, musisz też gdzieś je przechowywać. W związku z pytaniem 2 Firebase nie ma obecnie żadnej ogólnej zdolności sprawdzania (np. "/ Accounts [1,2]"), choć prawdopodobnie nastąpi to w przyszłości.
  2. Reguł bezpieczeństwa nie można również używać do wysyłania zapytań o dane. Możesz albo odczytać wszystkie dane w danej lokalizacji, albo nic z tego. Jeśli chodzi o twoje pytanie nr 1, reguły bezpieczeństwa nie będą automatycznie wyszukiwać Twoich kont.
  3. Reguły bezpieczeństwa nie umożliwiają przeszukiwania zawartości tablicy dla elementu, ale mogą sprawdzić, czy klucz istnieje w obiekcie. Dlatego jeśli użytkownicy 1 i 4 mają dostęp do czegoś, prawdopodobnie będziesz chciał zapisać {1: prawda, 4: prawda} zamiast [1, 4].

Mając to na uwadze, polecam przechowywania danych takich jak pierwszego przykładu, ale bez użycia tablic:

users: { 
    1: { 
    name: 'Ted', 
    accounts: { 
     1: true, 
     2: true 
    } 
    } 
    2: { 
    name: 'Frank', 
    accounts: { 
     1: true 
    } 
    } 
} 

accounts: { 
    1: { 
    name: "Checking" 
    }, 
    2: { 
    name: "Savings" 
    } 
} 

To pozwoli Ci łatwo dostać wszystkie konta dla danego użytkownika. Jeśli chcesz również móc iść w innym kierunku (wszyscy użytkownicy konta), będziesz musiał skopiować te informacje i zapisać je również na kontach. Np .:

accounts: { 
    1: { 
    name: "Checking", 
    users: { 
     1: true, 
     2: true 
    } 
    }, 
    2: { 
    name: "Savings", 
    users: { 
     1: true 
    } 
    } 
} 

Mam nadzieję, że to pomoże!

+3

Możesz określić, w jaki sposób chcesz wysłać żądanie. Jeśli masz tylko bazę ogniową odniesienia do konkretnego użytkownika. W jaki sposób uzyskałbyś informacje na temat swojego konta: – feresr

+2

@feresr potrzebujesz wielu żądań - pierwszego, aby uzyskać listę kont (/ users/1/accounts), a następnie jednego dla każdego konta, które Cię interesuje (do/konta/n). Dlatego czasami warto zachować niektóre informacje podsumowujące w/users/x/accounts/y, takie jak nazwa konta. –

+0

OK. Teraz mam sens. Dzięki! – feresr

Powiązane problemy