2016-07-29 7 views
3

Wie kann ich die Benutzerrollenauthentifizierung in Firebase Android App hinzufügen? Von dem, was ich sehe, hat Firebase nur E-Mail und Passwort-Authentifizierung. Ich möchte eine Android-App entwickeln, die über 2 Benutzerrollen verfügt. Zum Beispiel, wenn ein normales Mitglied sich anmeldet, wird er zu normalem_MemberActivity gehen und wenn er ein Premium-Mitglied ist, wird er zu premium_memberActivity gehen. Wie füge ich Rollen in Firebase hinzu? Konnte ein ähnliches Problem wie meines nicht finden.Wie können Benutzerrollen in Firebase getrennt werden?

Normalerweise würde ich es tun, wie folgt:

String role = intent.getStringExtra("role"); 

if (role.equals("admin")){ 
FragmentManager fm = getSupportFragmentManager(); 
fm.beginTransaction().replace(R.id.content_frame, new AdminHomeFragment()).commit(); 
}else{ 
FragmentManager fm = getSupportFragmentManager(); 
fm.beginTransaction().replace(R.id.content_frame, new NormalFragment()).commit(); 
} 
+0

Sie sollten Ihre Benutzer in der Echtzeitdatenbank speichern. Auf diese Weise können Sie einen benutzerdefinierten Benutzer mit dem Attribut role erstellen. Jedes Mal, wenn sich ein Benutzer anmeldet, können Sie seine Rolle in der Datenbank überprüfen. –

+0

@ RosárioPereiraFernandes ist das anders als Auth? Wenn ich die Echtzeitdatenbank für meine Benutzer verwenden möchte, wäre sie auch für das System von Freunden nützlich? – Gian7

+0

Ja, es ist der beste Weg, um Freunde System zu erstellen. Ich hoffe, Sie sind mit Datenbanken vertraut. Falls Sie mit SQL-Datenbanken gearbeitet haben, sieht das für Sie vielleicht etwas anders aus (da Firebase die NoSQL-JSON-Datenbank verwendet), aber Sie werden sich daran gewöhnen. –

Antwort

6

Sie können einen Rolle-Knoten in der Feuerbasis Datenbank hinzufügen dem Benutzer uid und ihre Rolle zu speichern.

"roles" : { 
    "uid1" : "normal", 
    "uid2" : "premium", 
    "uid3" : "normal", 
} 

Dann können Sie die Rolle Wert erhalten, nachdem der Benutzer erfolgreich in

ref.child("roles").child(firebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     String role = dataSnapshot.getValue(String.class); 
     // check role and replace fragment 
    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}); 
+0

Werde es später versuchen! :) Übrigens, kannst du mir auch ein Snippet bei der Registrierung von normalen und Premium-Usern geben? Keine Ahnung. Vielen Dank! – Gian7

+0

@ Gian7 Folgen Sie [dieser Anleitung] (https://firebase.google.com/docs/auth/android/password-auth), Sie können den Wert für den Knoten "roles" unter "addOnCompleteListener" festlegen – Wilik

1

Firebase unterzeichnet haben gerade die Unterstützung für rollenbasierten Zugriff auf alle Benutzer über benutzerdefinierte Ansprüche auf dem ID-Token: https://firebase.google.com/docs/auth/admin/custom-claims

würden Sie die Premium-Zugriffsregel definieren:

{ 
    "rules": { 
    "premiumContent": { 
     ".read": "auth.token.role === 'premium'", 
     ".write": "auth.token.role === 'premium'", 
    } 
    } 
} 

die Benutzerrolle mit dem Admin SDK Set:

// Set admin privilege on the user corresponding to uid. 
admin.auth().setCustomUserClaims(uid, {role: 'premium'}).then(() => { 
    // The new custom claims will propagate to the user's ID token the 
    // next time a new one is issued. 
}); 

Diese auf die ID des entsprechenden Benutzertoken Ansprüche propagieren wird.

Um es vom Token auf dem Client zu analysieren, müssen Sie die Payload des ID-Tokens decodieren.

Sie können Benutzer nach Bedarf aktualisieren/herabstufen. Sie bieten auch eine programmatische Möglichkeit, alle Benutzer aufzulisten, wenn Sie wiederkehrende Skripts zum Ändern der Zugriffsebenen eines Benutzers haben: https://firebase.google.com/docs/auth/admin/manage-users#list_all_users

Verwandte Themen