WookcomDocsIr a Wookcom ↗

Modelo de datos y permisos

Documento de proyecto

project.ts define ProjectSnapshot versión 2: id, ownerUid, activePageId, document, revisiones local/remota y datos de publicación (publishedSlug, slug deseado y revisiones publicadas). ProjectDocument agrupa páginas, secciones de cabecera, tema, metadatos, configuración del editor y, opcionalmente, tienda y embudos. builder.ts define páginas, secciones y elementos del lienzo, con geometría principal y variantes móvil/tableta.

snapshot.ts centraliza creación, migración, clonación y validaciones de estructura/tamaño. Guardar no es una colección de mutaciones aisladas por elemento: el repositorio maneja instantáneas del proyecto y revisiones optimistas.

Almacenamiento

Ruta o medio Contenido y acceso previsto
localStorage, nexus:v2:{uid}:{id} Copia local del snapshot; sufijo :previous para recuperación e índice por usuario. localRepository.ts.
users/{uid} Perfil del usuario. AuthContext.tsx.
users/{uid}/projects/{projectId} Borrador y revisiones. firestoreRepository.ts.
users/{uid}/projects/{projectId}/store_orders/{orderId} Pedidos vinculados al proyecto. StoreContext.tsx; también contiene lectura de productos antiguos para migración.
users/{uid}/project_revisions/... Historial escrito por servidor; las reglas excluyen su escritura cliente.
published_sites/{slug} Copia pública de páginas, tema, metadatos y datos opcionales de tienda/embudos, con propietario, proyecto y revisiones. publish.ts.
domain_mappings/{domain} Resolución de dominio a slug. publishedSites.ts.
admin_sites/{ownerUid}~{projectId} Control administrativo usado al publicar y servir. model.ts, publication.ts.
site_access/{ownerUid}~{projectId}/members/{uid} Roles de colaboración consultados en servicios. service.ts.
form_sites/{projectId}/forms/{formId}/submissions/{submissionId} Formularios y respuestas; firestore.rules, forms-service.ts.
course_sites/{projectId} y subcolecciones courses, lessons, invites, members, requests Catálogo y acceso a cursos; firestore.rules, service.ts. Las lecciones cuelgan de cada curso.

Este mapa reúne los agregados principales; no pretende enumerar todas las colecciones internas de OAuth, facturación o auditoría. Sus repositorios y servicios son la fuente de verdad.

Fronteras de permisos

firestore.rules deniega por defecto y habilita acceso del propietario a users/{uid} y sus subcolecciones, con la excepción de escritura de revisiones. Los sitios publicados pueden leerse públicamente si el control administrativo permite la publicación; el propietario conserva lectura. Las reglas también permiten al propietario crear/actualizar/eliminar publicaciones bajo condiciones. Por tanto, que la interfaz publique mediante servidor no implica que las reglas obliguen todas las publicaciones a atravesar /api/publish.

Los dominios son legibles públicamente. Los formularios publicados aceptan creación de respuestas con claves, tipos, número de respuestas y fecha restringidos; lectura y borrado corresponden al propietario. Esto no demuestra controles de abuso o cuotas externos. Los títulos de cursos publicados son legibles, mientras que las lecciones exigen propiedad, invitación válida por correo verificado o membresía activa con acceso al curso.

Los servicios Admin eluden estas reglas y deben validar sus propios permisos. La amplia escritura del propietario bajo su árbol no equivale a validación exhaustiva del esquema por reglas. La sincronización por revisiones y los validadores de aplicación deben mantenerse coherentes entre cliente y servidor.