Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

193
Visualizações
¿Existe un patrón de acceso que permita esta relación de varios a varios que pueda ser manejada por reglas de seguridad al usar Firestore onSnapshot?

He estado tratando de crear un sistema en el que los usuarios puedan asignarse a grupos y los grupos puedan asignarse a recursos . Si un usuario es miembro de un grupo en particular, ese usuario puede acceder a todos los recursos compartidos con ese grupo.

Un usuario puede ser parte de varios grupos y un recurso se puede compartir con varios grupos. Por ejemplo, un usuario puede ser parte de los grupos 'administradores' y 'equipo de desarrollo', y un recurso puede compartirse con los grupos 'marketing' y 'equipo de desarrollo'.

Una estructura de base de datos y una consulta que maneja con éxito esto es:

 <collection> [doc] <users> [userId]: { groups: [groupId, groupId...] } <groups> [groupId]: { members: [userId, userId...] } <resources> [resourceId]: { accessibleBy: [groupId, groupId...] }

y la consulta de Firestore:

 db.collection('/resources').where("accessibleBy", "array-contains-any", [...aUsersGroups])

Esto funciona muy bien. Sin embargo, donde esto se pone difícil es en las reglas de seguridad. Estoy usando oyentes onSnapshot y la regla que creé inicialmente (a continuación) falla, supongo que porque necesita verificar el acceso a cada documento en función del campo 'accesiblePor', lo que sería muy costoso computacionalmente al acceder a grandes colecciones.

 match /resources/{resourceId} { allow read: if resource.data.accessibleBy.hasAny(get(/databases/$(database)/documents/users/$(request.auth.uid)).data.groups); }

Vale la pena señalar que la regla anterior funciona para las solicitudes get() individuales de Firestore.

Algunas opciones que he considerado:

  • He contemplado normalizar nuestra estructura de datos por grupo, pero me imagino que esto requeriría mucha duplicación de datos que podría volverse inmanejable.
  • También he contemplado construir un sistema que solo use llamadas get() en lugar de oyentes, pero necesito actualizaciones en tiempo real (más o menos) y esto probablemente se volvería ineficiente.
  • Finalmente, he contemplado usar un entorno nodejs pero no estoy familiarizado con los patrones de acceso usando un servidor y todavía estaría buscando lograr la funcionalidad en tiempo real.

Estoy dispuesto a asignar usuarios solo a un grupo (o quizás a un grupo, más acceso de lectura predeterminado), pero necesito la funcionalidad para compartir recursos entre varios grupos.

Puede que Firestore no sea la respuesta a mis problemas aquí, pero pensé en preguntarle a la comunidad antes de buscar en otra parte. ¡Gracias de antemano! :)

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda