Aggiungi is fake, la bandiera che rende un account invisibile invece di cancellato

Featurekamo-shared-library
Spegnimento
19 agosto 2026 alle ore 07:54 UTC
Autore
Kamo
Impegno
15f942a

Un conto sintetico — un artefatto di prova, un apparecchio di semenza, o un cartello giudicato per essere automatizzato — ora trasporta `users.is fake`, e la piattaforma smette di riconoscerlo. Cancellare un account non è una vera opzione: una riga utente è la radice di sette le tabelle satellitari, ogni Membro che possiede e ogni Organizzazione che ha creato, che in attivare i propri domini, funzionalità, modelli di posta elettronica, ruoli e snapshot di archiviazione. Cancellazione significa fuggire attraverso tutto ciò o lasciare orfani, e distrugge le prove di qualunque cosa abbia fatto il conto. Un booleano è reversibile e costa una colonna. La bandiera vive sull'USER, non sul membro o sull'organizzazione, perché la proprietà è l'unico bordo che raggiunge in modo affidabile i dati derivati: `orgs.user id owner` e `members.user id` entrambi puntano qui, quindi una bandiera risponde "è il creatore di questa riga sintetico" per tutte e tre le spine. La registrazione dell'org invece lascerebbe l'account in grado firmare e creare di più. Quello che la bandiera raggiunge, e perché ognuno è qui piuttosto che nel chiamante: - `UserRepository.findSession` e la proiezione auth: l'account flagged risolve a zero righe, quindi legge come inesistente piuttosto che come bloccato. - `MemberRepository` / `TeamMemberRepo`: esclusi dagli elenchi dei membri di org e da entrambe le ricerche directory, accanto al System User che era già filtrato lì. - No, no. l'enumerazione choke punto nove chiamata i siti condividono. `getOrganizationBy Id` non è deliberatamente filtrato — è indietro scrive ed è come la superficie di amministrazione raggiunge un org flagged per sgonfiarlo. - No, no. un org flagged smette di risuonare dall'ospite, quindi non può continuare ad accettare iscrizioni reali sotto il proprio sottodominio di registro. - filtrato nella query, piuttosto che in quella watcher, perché la spazzata prende un lotto fisso ogni minuto e un dominio nessuno possiede sarebbe altrimenti tenere una di quelle slot per sempre, probing DNS di qualcun altro. Ognuno di questi utilizza un chiaro e alias LEFT JOIN. Un bare `o.owner.isFake` percorso in una clausola WHERE fa Hibernate aggiungere un secondo, implicito INNER unire, che sarebbe silenziosamente cadere ogni riga il cui proprietario è null — e per `findByDomain` che è la risoluzione di login. I ricercatori di cui sopra sono additivi; i ricercatori di identità su UserRepository sono lasciati non filtrato di proposito. La maggior parte di loro sono carica-portante per l'unicità pre-controlla e come per le ricerche, e `USERS.EMAIL`/`ALIAS` sono unici per security-provider — quindi un registrazione duplicato-check che non poteva vedere una riga contrassegnata avrebbe navigato oltre il proprio guardia e morire invece su una violazione di vincolo. Aggiunge anche REGISTRAZIONE, REGISTRATION REJECTED, EMAIL VERIFIED e ORG CREATED a AccessLogEventType. `system access logs` ha tenuto solo login, login fallito e logout, così un account che ha registrato, verificato, ha preso una sessione di auto-login e ha creato cinque organizzazioni prodotte zero righe — nessun evento, nessun IP, nessun utente-agente — e ogni rilevamento regola i tasti fuori eventi di login, lasciando l'intero registro imbuto inosservabile. `users.is fake` esiste già in produzione: KamoInitializer UserIsFakeMigration prima di questa spinta, quindi nessun servizio può costruire contro uno schema non migrato.

Tutte le modifiche

Come quello che vedi la spedizione?

Ognuno di questi aggiornamenti atterra automaticamente nello spazio di lavoro. Inizia gratis e guardalo crescere settimana dopo settimana.

Inizia gratis per sempreVisualizza il prezzo