2013-07-28 8 views
8

Być może moje pytanie powinno zostać zmienione w następujący sposób: w jaki sposób mogę zmienić te zachowania w CRUD, na czym opiera się Firebase?Jak używać Firebase do obsługi automatycznych obliczeń po stronie serwera?

Dostaję, że CRUD działa dobrze. Widzę także, jak deklaratywny model bezpieczeństwa Firebase pozwala mi zapewnić właściwą ochronę po stronie serwera, gdzie powinien istnieć.

Załóżmy, że mam usługę subskrypcji. Za każdym razem, gdy ktoś zarejestruje się w usłudze, musi automatycznie dodać do swojego konta "należny" element zamówienia. W prostych słowach:

/users/john 
/services/goodstuff 

Więc john można zapisać się na goodstuff, mogę pozwolić mu się przez 30 dni bez płacenia, ale przypomni mu, kiedy 30 dni jest w górę, „hej, trzeba zapłacić albo cię stracisz subskrypcję na dobro. "

z serwerem back-end, chciałbym POST do /services/goodstuff/members np mieć część obsługi POST dodać „zawdzięczam” element zamówienia do john „s uwagę, zapewniając, że nikt nie może dołączyć goodstuff bez oznaczone jako należny.

W aplikacji Firebase BaaS, w której nie istnieją logiki po stronie serwera, w jaki sposób mogę ją skorygować, aby uzyskać takie samo skuteczne działanie?

Odpowiedz

6

Update (10 marca 2017): Choć architektura Przedstawię poniżej jest nadal ważna i może być stosowany do łączenia Firebase z istniejącej infrastruktury, Firebase właśnie wydany Cloud Functions for Firebase, która pozwala na uruchomienie funkcji JavaScript w Google serwery w odpowiedzi na zdarzenia Firebase (takie jak zmiany w bazie danych, logowanie użytkowników i wiele innych).

Potencjalnym rozwiązaniem (niesprawdzone, przepraszam, ale powinno to być prawo pomysł):

{ 
    "rules": { 
    "users": { 
     "$user": { 
     /* When they create their user record, they must write a 'due' that's 
     * within the next 30 days. */ 
     ".write": "!data.exists() && newData.child('due').isNumber() && newData.child('due').val() < now + (30*24*60*60*1000)" 
     } 
    }, 
    "services": 
     "$service": { 
     /* Must be authenticated and due date must not be passed. */ 
     ".read": "auth != null && now < root.child('users/' + auth.id + '/due).val()" 
     } 
    } 
    } 
} 

Wymagałoby to, że gdy ktoś zaloguje się po raz pierwszy i inicjuje ich użytkowników/entry, oni d trzeba wpisać termin w ciągu najbliższych 30 dni. A następnie, podczas uzyskiwania dostępu do dowolnej usługi, termin ten zostanie zweryfikowany, aby nie minął.

To powiedziawszy, inną opcją jest po prostu zakręcić małą usługę backend, aby obsłużyć tego rodzaju logiki biznesowej. Firebase przoduje w ochronie, przechowywaniu i synchronizowaniu danych. Ale jeśli masz skomplikowaną logikę biznesową, możesz zastanowić się nad rozpoczynaniem małego procesu backendu. Firebase ma klientów REST api, a także Node.JS i JVM, więc naprawdę łatwo jest uruchomić własny kod zaplecza, który jest zintegrowany z Firebase.

+1

To bardzo eleganckie. Zamiast tego, aby serwer obliczył, co należy dodać i dodać, mówisz: "pozwól klientowi go obliczyć, ale wymuś, by mógł otrzymać tylko jedną odpowiedź". To naprawdę bardzo eleganckie, lubię to. – deitch

+0

Osobiście nie wpisałbym w regułach bezpieczeństwa liczby '30 * 24 * 60 * 60 * 1000', raczej streściłbym ją jako część danych pobieranych przez root, ale to jest naprawdę miłe. – deitch

Powiązane problemy