Por qué tu primera consulta no devuelve nada: las políticas son fail-closed
Publicado 2 min de lecturaTambién en inglés
La sorpresa más común cuando una app habla por primera vez con Groveback: creas una colección,
insertas unos documentos desde el dashboard, llamas find() desde el SDK con un usuario
logueado… y no llega nada.
No hay nada roto. El data plane es fail-closed: una colección sin política niega a todo el que no sea admin. El dashboard ve tus documentos porque usa rutas de admin; los usuarios finales de tu app no, hasta que una política lo permita.
El arreglo: di quién es dueño de qué
La mayoría de colecciones empiezan con “cada usuario ve y edita sus propios documentos”:
{
"list": { "filter": { "ownerId": "$auth.uid" } },
"read": { "filter": { "ownerId": "$auth.uid" } },
"create": { "validate": "true" },
"update": { "filter": { "ownerId": "$auth.uid" }, "immutableFields": ["ownerId"] },
"delete": { "filter": { "ownerId": "$auth.uid" } }
}
El filter es un fragmento de query de Mongo que se combina con $and en la consulta real,
así que la paginación y los índices siguen funcionando. En create ni siquiera hace falta
enviar ownerId: el servidor lo fuerza al id de quien llama.
Tres comportamientos que conviene saber
- Un fallo es 404, no 403. Leer un documento que no puedes ver se ve igual que leer uno que no existe. Nunca se revela la existencia, así que no armes UI que distinga “prohibido” en lecturas individuales.
- Un placeholder que no se resuelve, niega. Un usuario anónimo contra una regla con
$auth.uidno recibe nada; no coincide con documentos cuyoownerIdsea null. Si quieres lecturas públicas, escribe{ "filter": {} }enlist/reada propósito. PUTnunca deja huérfano un documento.id,ownerIdycreatedAtse re-fijan desde el documento existente, así que un reemplazo completo que olvideownerIdconserva al dueño.
Depúralo antes de publicar
El editor de políticas del dashboard tiene un simulador Test access: eliges operación y usuario y ves qué decide el motor, sin escribir código de cliente. Cuando una consulta vuelve vacía, es el primer lugar donde mirar.
Más en la guía de políticas.