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?
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:
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.
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.