json firebase firebase-security

json - ¿Cómo crear un perfil de usuario público/privado con las reglas de seguridad de Firebase?



firebase-security (2)

Definitivamente puede asegurar el acceso a los datos públicos y privados con su estructura de datos actual.

Pero un caso de uso que probablemente desee en algún momento es mostrar una lista de la información pública para todos los usuarios. Con su estructura de datos actual eso no es posible, porque el modelo de seguridad de Firebase no se puede usar para filtrar datos . Para obtener una excelente respuesta que cubra esto, consulte Restricción del acceso de niño / campo con reglas de seguridad .

La mayoría de los desarrolladores dividen los datos públicos y privados en subárboles completamente separados:

{ "users" : { "YFIIAgwa2kaannrXjwvSZmoywma2" : { "Name:" : "Example 1", }, "YgSfSzPzxLbyDL17r6P9id2cdvH2" : { "Name:" : "Example 2", } }, "public_profiles": { "YFIIAgwa2kaannrXjwvSZmoywma2" : { "email" : "[email protected]" }, "YgSfSzPzxLbyDL17r6P9id2cdvH2" : { "email" : "[email protected]" } } }

Luego puede asegurar el acceso con:

{ "rules": { "users": { "$uid":{ ".read": "auth != null && auth.uid == $uid", ".write": "auth != null && auth.uid == $uid", } }, "public_profiles": { ".read": "auth != null", "$uid":{ ".write": "auth != null && auth.uid == $uid", } } } }

Ahora cualquier usuario autenticado puede escuchar /public_profiles , lo que significa que puede mostrar fácilmente una lista de estos perfiles.

{ "rules": { "users": { "$uid":{ //Private whatever under "uid" but Public is exposed ".read": "auth != null && auth.uid == $uid", ".write": "auth != null && auth.uid == $uid", "public": { ".read": "auth != null" } } } } }

  • He creado estas reglas para que los usuarios tengan un perfil público / privado.
  • El perfil " usuarios / {uid} / público " debe ser accesible para cualquier usuario que esté autenticado, pero no puede acceder a los datos en " usuarios / uid "

Aquí hay algunos datos falsos que se almacenan en mi base de datos de Firebase.

{ "users" : { "YFIIAgwa2kaannrXjwvSZmoywma2" : { "Name:" : "Example 1", //This public child should be accessible by //"Example 2" but cannot know the name of // this user "public" : { "email" : "[email protected]" } }, "YgSfSzPzxLbyDL17r6P9id2cdvH2" : { "Name:" : "Example 2", //This public child should be accessible by //"Example 1" but cannot know the name of // this user "public" : { "email" : "[email protected]" } } } }

¡Quiero saber si esta es la forma sólida de evitar que los usuarios accedan a la información crítica del usuario! ¿Hay alguna forma de mejorar esto usando validar? Estoy abierto a cualquier sugerencia que tengan. Quiero crear las mejores y simples reglas de seguridad para mi aplicación.


Hmm, ¿no sería más fácil (re) estructurar la base de datos para que tenga un campo público y privado por usuario? Algo como:

{ "users" : { "YFIIAgwa2kaannrXjwvSZmoywma2" : { "private": { "Name:" : "Example 1" }, "public" : { "email" : "[email protected]" } }, "YgSfSzPzxLbyDL17r6P9id2cdvH2" : { "private": { "Name:" : "Example 2" }, "public" : { "email" : "[email protected]" } } } }

/ UPD: ¿De esta manera debería ser fácil (er) tener los diferentes permisos porque no los heredarán del padre?