es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mejores prácticas para almacenar la propiedad de un documento en Firestore

Digamos que tengo una colección todos que contiene documentos que representan listas de tareas pendientes de los usuarios.

Para asegurar estos documentos, a menudo puedes encontrar los siguientes fragmentos de reglas de seguridad:

< pre>...
match /todos/{todo} {
allow create: if request.auth.uid != null & amp; & amp;request.resource.data.ownedBy == request.auth.uid;
permitir leer, actualizar, eliminar: si resource.data.ownedBy == request.auth.uid;
}
...

Estas reglas permiten operaciones CRUD en los documentos siempre y cuando el campo ownedBy sea igual al uid de la persona que realiza las solicitudes.

Mi preocupación aquí es que el campo ownedBy también forma parte de ese documento, lo que significa que un usuario puede modificar fácilmente ownedBy a un userId diferente. Dudo que alguien lo haga por alguna razón, pero desde el punto de vista del desarrollador, ¿significa eso que es peligroso tener el campo en el que confía para formar parte del documento que se puede editar?

Otra manera de verlo es que este comportamiento es el mismo que almacenar permisos/autorizaciones en los mismos documentos. Sería incorrecto almacenar {canEdit:true, canDelete:fafalse} dentro de ese mismo documento, entonces, ¿por qué está bien almacenar el campo ownedBy en ese documento?

¿Cuáles son algunas buenas prácticas para lidiar con este problema?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Firebase y Google Cloud Firestore, recomendaría las siguientes buenas prácticas para solucionar el problema de depender de un campo que puede ser editado por los usuarios:

    1. Utilice reclamos personalizados para almacenar permisos de usuario: En lugar de depender de un campo dentro del documento para determinar los permisos de usuario, puede utilizar reclamos personalizados para almacenar esta información en el token del usuario. De esta manera, los permisos del usuario se verifican en el lado del servidor y no pueden ser modificados por el usuario.
    2. Utilice lógica del lado del servidor para determinar la propiedad: En lugar de depender únicamente del campo “ownedBy” en el documento, puede utilizar la lógica del lado del servidor para verificar la propiedad. Esto podría implicar la verificación de la identificación del usuario frente a una lista de identificaciones asociadas con ese documento, o utilizar una colección separada para almacenar información de propiedad.

    3. Valide los datos de entrada: Siempre que un usuario envíe datos que puedan afectar la propiedad o los permisos, valide esos datos para asegurarse de que cumplan con ciertos criterios. Por ejemplo, podría verificar que el campo “ownedBy” coincide con la identificación del usuario antes de permitir cualquier cambio en el documento.

    Al implementar estas buenas prácticas, puede garantizar que los permisos de usuario y la propiedad sean manejados de manera segura y no puedan ser fácilmente modificados por los usuarios.

Comments are closed.