2016-05-31 15 views
6

mam tę strukturę:Zasady Firebase bezpieczeństwa: .indexOn unikalne identyfikatory

"post": { 
    "groupMember": { 
    "-KHFHEHFWDB1213": "true", 
    "-KSJHDDJISIS011": "true", 
    "-KJSIO19229129k": "true" 
    } 
} 

Chcę .indexOn automatycznie wygenerowane identyfikatory unikalne groupMember.

Próbowałem w ten sposób: Ale ja wciąż otrzymuję ten błąd

"post": { 
    ".indexOn": "groupMember" 
    ... 
} 

:

rozważyć dodanie ".indexOn": "groupMember/-KHFHEHFWDB1213" w/post

Więc jak dodać .indexOn na unikalny identyfikator?

UPDATE:

To zapytanie używam (Swift):

postRef.queryOrderedByChild("groupMember/\(uid)").queryEqualToValue(true).observeEventType(.Value, ...) 
+1

Popraw mnie, jeśli się mylę, ale jestem pewien, że domyślnie indeksuje klucze? – Chris

+0

Czy możesz podać zapytanie, które powoduje błąd indeksowania? Chris ma rację, że Firebase domyślnie indeksuje klucze, więc domyślam się, że samo zapytanie jest źle sformułowane. –

+0

@MichaelBleigh Zaktualizowałem mój post – leonardloo

Odpowiedz

1

Aby zapytać, czy nie jeden z podanych kluczy ma wartość "true" (zauważ, że jako wpisane swoje dane struktura jest ciągiem, a nie boolowskim - na co należy zwrócić uwagę!) Będziesz chciał utworzyć reguły bezpieczeństwa w następujący sposób:

{ 
    "post": { 
    "groupMember": { 
     "$memberId": {".indexOn": ".value"} 
    } 
    } 
} 

A następnie użyj queryOrderedByValue("true") na ścieżce /post/groupMember. Ważne jest, aby pamiętać, że w regułach jest zadeklarowany klucz wieloznaczny reprezentujący wygenerowane przez Ciebie identyfikatory oraz $memberId, co oznacza, że ​​zamiast indeksowania właściwości podrzędnej (jeśli struktura ma inną warstwę zagnieżdżania), chcesz indeksować natychmiastowy liść wartość węzła.

+0

Dzięki za odpowiedź. Jeśli jednak zapytam o to na podstawie ścieżki '/ post/groupMember', w jaki sposób otrzymam informacje o rodzicach, takie jak rzeczy w'/post/message'? – leonardloo

+0

Myślę, że jestem bardzo niejasny co do tego, co dokładnie próbujesz zrobić. Czy próbujesz filtrować grupę postów według tego, czy bieżący użytkownik jest członkiem grupy? Jeśli tak, powinieneś zmienić strukturę danych i prawdopodobnie je denormalizować. Jeśli nie, to co dokładnie próbujesz osiągnąć? –

+0

Tak więc z odpowiedzią tutaj, czy atrybut .value odnosi się do wartości groupMember? Jeśli zamiast symbolu groupMember mam symbol wieloznaczny $ $ i chciałem go zindeksować, czy wartość .indexOn: .value będzie nadal obowiązywać? – Silmarilos