comment implémenter le contrôle d'accès dans firebase

c'est ma première incursion dans Firebase & nosql, je viens d'un fond SQL.

à L'aide de L'e-mail/Mot de passe de sécurité de connexion Simple, Comment puis-je limiter l'accès aux données dans Firebase? Par exemple, certains utilisateurs auront accès pour créer un objet d'affaires (utilisateurs, clients, catégories, etc.), d'autres pas. Y a-t-il un moyen de joindre une liste de permissions à la variable "auth"?

29
demandé sur acole76 2013-10-22 18:26:02

3 réponses

il n'y a pas de façon d'attacher les permissions directement à la variable auth (ou du moins cela ne semble pas être une stratégie prévue). Je recommande de créer une collection d'utilisateurs organisés par auth.uid et vous pouvez garder quelle que soit la nature de l'autorisation attributs que vous voulez là-bas, ce qui fait que vos règles de sécurité pourrait quelque chose de ressembler à ceci (non testé):

{
  "rules": {
    ".read": true,
    "users": {
      ".write": "root.child('users').child(auth.uid).child('role').val() == 'admin'"
    }
  }
}

role est un attribut appartenant à tous les objets dans votre users collection.

UPDATE

Voir le commentaire ci-dessous:

"Il n'y a pas un moyen de joindre directement les autorisations pour l'auth variable", Ce qui a changé en 2017. Vous pouvez maintenant joindre des réclamations personnalisées à un profil auth, qui sont disponibles dans les règles de sécurité. Voir la réponse de bojeil et la documentation Firebase pour les réclamations personnalisées. - Frank van Puffelen!--5-->

29
répondu hiattp 2018-09-24 13:52:19

un an plus tard, il serait peut-être préférable d'examiner à nouveau cette option "Custom Tokens".

https://www.firebase.com/docs/security/guide/user-security.html#section-custom

8
répondu Jamey McElveen 2014-10-27 19:42:54

Firebase a lancé le support pour l'accès basé sur les rôles sur n'importe quel utilisateur via les réclamations personnalisées de l'utilisateur sur le token D'ID:https://firebase.google.com/docs/auth/admin/custom-claims

vous définiriez la règle d'accès admin:

{
  "rules": {
    "adminContent": {
      ".read": "auth.token.admin === true",
      ".write": "auth.token.admin === true",
    }
  }
}

définir le rôle de l'utilisateur avec le SDK Admin Firebase:

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

cela se propagera aux revendications de token ID de l'utilisateur correspondant. Vous pouvez forcer un jeton d'actualisation immédiatement après: user.getIdToken(true)

Pour l'analyser à partir de le jeton sur le client, vous devez base64 décoder la charge utile du jeton ID: https://firebase.google.com/docs/auth/admin/custom-claims#access_custom_claims_on_the_client

vous pouvez mettre à niveau / dégrader les utilisateurs au besoin. Ils ont également fourni un moyen programmatique pour lister tous les utilisateurs si vous avez des scripts récurrents pour modifier les niveaux d'accès d'un utilisateur: https://firebase.google.com/docs/auth/admin/manage-users#list_all_users

6
répondu bojeil 2017-09-27 21:49:03