usuario users reglas firestore con firebase firebase-security

users - ¿Cómo implemento control de acceso basado en roles en firebase



roles en angular (3)

Esta es mi primera incursión en Firebase y nosql, vengo de un fondo SQL.

Al usar el correo electrónico / contraseña de inicio de sesión simple, ¿cómo puedo limitar el acceso a los datos en Firebase? Por ejemplo, algunos usuarios tendrán acceso para crear un objeto comercial (usuarios, clientes, categorías, etc.), otros no. ¿Hay alguna manera de adjuntar una lista de permisos a la variable "auth"?



Firebase lanzó soporte para acceso basado en roles en cualquier usuario a través de reclamos personalizados del usuario en el token de ID: https://firebase.google.com/docs/auth/admin/custom-claims

Debería definir la regla de acceso de administrador:

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

Establezca la función de usuario con el SDK de administración de 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. });

Esto se propagará a los reclamos de token de identificación del usuario correspondiente. Puede forzar la actualización del token inmediatamente después de: user.getIdToken(true)

Para analizarlo desde el token en el cliente, necesita decodificar base64 la carga útil del token de ID: https://firebase.google.com/docs/auth/admin/custom-claims#access_custom_claims_on_the_client

Puede actualizar / degradar usuarios según sea necesario. También proporcionaron una forma programática de hacer una lista de todos los usuarios si tiene scripts recurrentes para cambiar los niveles de acceso de los usuarios: https://firebase.google.com/docs/auth/admin/manage-users#list_all_users


No hay forma de adjuntar permisos directamente a la variable de autenticación (o al menos eso no parece ser una estrategia intencionada). Recomiendo crear una colección de usuarios organizados por auth.uid y puede conservar los atributos de permisos que desee, de modo que sus reglas de seguridad se vean así (no probadas):

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

Donde role es un atributo que pertenece a todos los objetos en su colección de users .