- Spegnimento
- 10 agosto 2026 alle ore 14:13 UTC
- Autore
- Kamo
- Impegno
- 41c76a7
I contatti sono stati oggetto di una sola organizzazione. listBooks(orgId) was findByOrganizationId(orgId), e la query della lista di contatto aperta DOVE c.contactBook.organization.id = :orgId senza alcun predicato proprietario, quindi ogni membro ha visto — e potrebbe ingombrare, spostare ed esportare — ogni contatto qualsiasi collega avesse mai aggiunto. CardDAV è stato proprietario-scoped tutto il tempo (listBooksByUserId -> findByOwnerId), quindi il telefono di un membro e il web console non era d'accordo su quello che possedeva quell'account. Scope è ora organizzazione e proprietario su ogni lettura. Proprietario da solo porterebbe libri di un membro in ogni organizzazione a cui appartengono; organizzazione da solo è il bug che viene sostituito. - ContactQueryStore.whereClause() è un frammento JPQL statico e testabile, quindi il proprietario predicato vive esattamente in un posto piuttosto che essere re-derived per call site. - findInOrg -> findInScope(ids, orgId, ownerId): la guardia dietro ogni massa eliminare, spostare, esportazione e gruppo-membro cambiamento. - La lista di gruppo si sposta nel negozio di query, il proprietario-scoped; l'org-wide il lettore su ContactService non ha avuto chiamate rimanenti e viene rimosso piuttosto di sinistra come punto d'ingresso non incorniciato. - Le guardie diventano libroBelongsToMember / groupBelongsToMember / contattoBelongsToMember. Il libro senza proprietario dell'organizzazione-default appartiene a nessuno e 404 per tutti. - assicurarsiPersonalBook() disposizioni "I miei contatti" in prima lettura, quindi un membro senza libro non è lasciato con un raccoglitore vuoto e una creazione che non può successo. listBooks quindi non è più lettoOnly. Anche correzioni # Che ha passato un id utente # in listBooks(orgId) e così abbinato contro ORGANIZATION ID — esso non ha restituito nulla. Ora utilizza la lista del proprietario-scopio che ha sempre significato. I dati già seduti in libri condivisi sono migrati ContattoBookOwnerSplitMigration in KamoInitializerService.