2013-12-15 14 views
5

Przykłady w dokumentach typu firebase zakładają ręczną aktualizację reguł bezpieczeństwa firebase. W jaki sposób można modyfikować reguły bezpieczeństwa programowo, aby obsługiwać rzeczywiste aplikacje oparte na współpracy? Biorąc pod uwagę przypadek użycia, warunkiem jest, aby użytkownik mógł zapraszać innych użytkowników do współpracy/udostępniania wybranych danych oraz do przyznawania/odwoływania dostępu do współpracowników. Jak można to osiągnąć za pomocą bazy ogniowej?Jak programowo modyfikować reguły bezpieczeństwa w Firebase?

Odpowiedz

8

Rzeczywiście nie należy programowo zmieniać reguł bezpieczeństwa. Powinieneś pomyśleć o nich jako o kod i zmieniać je tylko w czasie wdrażania.

Jeśli to, co próbujesz zrobić, to zmienić to, co użytkownicy faktycznie mogą robić, powinieneś to zrobić, pisząc reguły bezpieczeństwa zależne od danych w bazie Firebase.

Na przykład, powiedzmy, że chcesz ograniczyć dostęp do danych tylko do użytkowników w określonej grupie. Zamiast modyfikować reguły bezpieczeństwa przy każdej zmianie członkostwa w grupie, po prostu przechowuj grupę w Firebase i sprawdzaj, czy bieżący użytkownik jest w tej grupie, zanim zezwolisz na dostęp.

".read" : "root.child('groups').child($groupID).child(auth.userid).exists()" 

W ten sposób, w każdej chwili zmiany członkostwa w grupie, użytkownicy automatycznie otrzymają dostęp do danych, które powinny być widoczne.

Bardziej złożony przykład reguł bezpieczeństwa można znaleźć w pliku rules.json pod numerem Firefeed.

+1

dzięki za szybką odpowiedź. Używanie grup do obsługi dynamicznie aktualizowanych użytkowników ma sens. Ale w jaki sposób obsługiwane są dynamicznie dodawane zestawy danych? Na przykład użytkownik może utworzyć projekt w katalogu/users/userid/projects/projectid, a następnie przydzielić dostęp do odczytu dla tego konkretnego projektu grupie współpracowników. Jak to osiągnąć w Firebase? – Jarnal

+1

Ustawienia grupy były tylko przykładem. Nie musisz mieć grup - możesz polegać na dowolnych danych. Na przykład sam zestaw danych może mieć "czytelną" flagę, która po ustawieniu na wartość true pozwala każdemu ją odczytać. Lub może mieć "czytelną" listę użytkowników, którzy mogą z niego korzystać. Etc ... –

+1

@AndrewLee, mam bardziej złożony przypadek: tworzę pokoje (oddziały) dynamicznie i chcę ograniczyć każdy pokój tylko do konkretnych współpracowników X, blokując innym możliwość pisania tam. Jak mogę określić te prawa dostępu podczas tworzenia pokoju? Pamiętaj, że mogą być miliony różnych pokoi. –

0

Ale w jaki sposób obsługiwane są dynamicznie dodawane zestawy danych?

Można to zrobić, używając węzła podrzędnego $. Wygląda to mniej więcej tak:

Oto mój bazy

users 
- userIDHere 
    - name: John Doe 
    - whatever: who knows 

I należy ustawić zasady dotyczące każdego użytkownika w ten sposób:

{ 
    "rules": { 
    "users": { 
     "$user": { 
     // whatever rules you want here, and you can reference $user to get the user's id. 
     } 
    } 
    } 
} 

nadzieję, że to, co pan pyta, i nadzieja to pomaga!

Powiązane problemy