Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· BillingService
Riscrivere BillingService attorno a BillingGroups
Elimina il livello di org. controllori, servizi e DTO. Introduce: - Gruppi di montaggio BillingGroupController, membri, abbonamenti, licenze, metodi di pagamento e fatture sotto /api/billing/groups. - BillingGroupService (lifecycle + Default Group + Free baseline), BillingGroupMemberService (applicazione di un gruppo per membro), BillingGroupSubscriptionService (Stripe sync with fallback to FREE DEFAULT E' una cosa da fare. Servizio fatturazione, LicenseService (priorità di disattivazione automatica + riattivazione inversa). - PlanCatalogService + PlanCatalogController a ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** - StripeWebhookServizio che consuma abbonamento / fattura / eventi di pagamento-metodo. - EntitlementInvalidator che pubblica segnali di invalidazione Redis. - PlatformAdminService + PlatformAdminController di ritorno per-org roll-up.
· kamo-shared-library
Sostituisci fatturazione a livello org con il modello BillingGroup
Presenta BillingGroup, BillingGroupMember, BillingGroupSubscription, BillingGroupLicense, BillingGroupPaymentMethod, BillingGroupInvoice, e Enti BillingGroupConfig (tutti in commercio condiviso/billing/billinggroup). Getta il vecchio BillingSubscription / BillingCustomer / BillingConfig / BillingPaymentMethod / BillingInvoice / BillingCredit / BillingUsageSnapshot entità del tutto — ogni org ora ottiene un gruppo di default con un GRATIS DEFAULT Abbonamento KamoCRM come base. Aggiunge la giunzione SecurityModelCommerceMarket collegare modelli di sicurezza ai mercati di commercio con abilitazione per-scope.
· SecurityService
Interaction Center member line utilizza i titoli di lavoro
Sostituisci il titolo di ruolo RBAC con il lavoroTitleOfficial, fallback a JobTitle titolo di catalogo per TeamMember, e l'etichetta Member for base Member record nel campo di ruolo payload by-department.
· kamo-internal
Campo ufficiale del titolo di lavoro per i membri del team sulla mia scheda di posizione
· kamo-shared-library
Aggiungi TeamMember.jobTitleOfficial colonna stringa opzionale (60 chars)
· SecurityService
Esposizione e persistere del lavoroTitleOfficial per i membri del team su API di profilo e di sicurezza dei membri
· KlusterServices
Utilizzare ECDSA P-256 per cert-manager Certificati specifiche e migrare RSA
· kamo-shared-library
Aggiungi trovareTeamMemberById per una risoluzione TeamMember affidabile
· kamo-shared-library
Carico tipi di branch con modelli di sicurezza per org id
· kamo-shared-library
Cache-Control opzionale sul caricamento degli oggetti
Utilizzato per il provisioning del tema così globals.css e config.json istruire i browser e proxy per rivalidate invece di servire oggetti cache stanti.
· SecurityService
ThemeRevision in config e cache intestazioni su asset tematici
Emettere temaRevision (epoch ms) in config.json su ogni scrittura; set Cache-Control su config, globals.css e sito. webmanifest carica così le cache dei bordi rivalutano.
· kamo-shared-library
Aggiunta di **********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
Utilizzato quando si rimuove un avatar in modo che il membro overrides arbitrare la stessa riga può essere cancellato prima di eliminare.
· kamo-internal
Clear wizard sessionStorage su fresco creare via ?fresh=1
Navigare da Rete per creare con ?fresh=1, rimuovere la query e utilizzare una blocco di breve durata in modo React Strict Modalità non ripristina una vecchia bozza prima persistere corre. Mago progetto di vite in sessioneStorage (non localStorage).
· kamo-shared-library
Politiche di conformità alle armi da fuoco/ alcool
- CHILD ORG SECURITY MODELS colonne ed entità default MEMBER SELECT - DTO e ChildOrgSecurityModelService creano/aggiornamento normalizzazione - AppliedModelEnforcementService applica le politiche per il bambino org bandiere ATF e età singleton
· SecurityService
Esporre le politiche di conformità ATF sui modelli e sui tipi di branch creati
- OrganizationController applica l'applicazione del modello prima delle assenze di età - SecurityModelController e MasterModelController passano i campi - BranchTypeController include politiche in /branch-types/creatable
· kamo-internal
Mago di conformità dalle politiche dei modelli di sicurezza
- I tipi di rami API mappano le politiche di alcol/tobacco/firearms in stato wizard - Fase Dynamic Compliance: omit from nav when model fixs all ATF and ages - Età e ATF controlla solo quando MEMBER SELECT o più opzioni di età - La recensione mostra solo i campi per cui l'utente è stato richiesto; - Impostazioni: radio di politica ATF sotto Amministrazioni di età consentite (modello di sicurezza) - Inviare usi efficaciComplianceForSubmit per valori forzati
· SecurityService
Allineare KnownAliases con DNS e auto-cert (add mail, play, app, segno; drop app, media)
· kamo-marketing
Mostra lo stato dal vivo con link changelog e conteggio giornaliero
Sostituisci l'anteprima conto alla rovescia e firma copia con un compatto "Now LIVE" callout, mantenere il link changelog, e mostrare sempre il numero di cambiamento di oggi dall'API dopo che si carica. Aggiornare l'anteprimaBanner stringhe tra le località .
· SecurityService
Rendere RoleRightsSyncService completamente self-healing su ogni boot
Aggiungere o rimuovere un RoleRightType non deve mai più richiedere la corsa KamoInitializerService. syncAll() ora esegue tre fasi su ogni startup: 1. I vincoli di guarigione — abbassare ogni vincolo CHECK su ogni porta destra tavolo e garantire i due vincoli unici upsert-required esistono. Hibernate cuoce valori enum in vincoli CHECK a TABELLA CREATA il tempo e non li aggiorna mai, e @UniqueConstraint solo prende effetto su TABELLA CREATA, così entrambi alla deriva ogni volta che gli enum si evolvono. @Enumerated già applica valori validi allo strato Java. 2. Eliminare i diritti orfani — DELETE DOVE right type NON IN (attuale enum) attraverso tutti e sei i tavoli portanti: # Org role rights # member rights, member rights applied, job title rights, dept rights. Maniglie sia ORDINAL int che STRING enum-name storage. 3. Inserire i diritti mancanti — invariati; si basa sui vincoli unici assicurata nella fase 1. Idempotent — sicuro da rifare. Aggiunta / rimozione dei valori di enum richiede ora Riavvia solo il SecurityService.
· kamo-internal
Aggiungere le impostazioni dell'Amministrazione della Piattaforma — borse di org, eventi, catalogo di piani
- Nuove pagine sotto /settings/platform (guardate da hasPlatformAdminAccess): - /organizzazioni — elencare ogni org, concedere/modificare/rivocare piani COMP con motivi - Eventi - mangimi di controllo di... - /plans — catalogo di sola lettura compresi i piani interni (isPublic=false) - useUserInfo: deriva haPlatformAdminAccesso da isGodModeActive() O (teamMember.isOrganizationOwner AND Organization.isTopLevel) - fatturazioneApi: piattaforma namespace (listOrgs, grantPlan, changeGrant, revocaGrant, listPlans, listEvents) + Intestazione X-God-Mode-Active quando impostata bandiera localeStorage - /api/billing proxy: inoltra X-God-Mode-Active dal cliente a BillingService - Impostazioni hub + SettingsStatusWindow: nuovo gruppo "Platform Administration" - BillingManager: banner platform-proprietario sostituisce il modulo Stripe per org di alto livello (wired in /settings/account come scheda di fatturazione) - FeaturesManager: "Platform Owner — Interno" intestazione e aggiornamento soppresso CTA quando org è di livello superiore e sub corrente è COMP - Classe di organizzazione / OrgNetwork / PublicProvider: aggiungere isTopLevel; rimuovere campo `di tipo` morto e i consumatori a sinistra in pagina di rete + rapporto manager - Rimuovere deprecated OrganizationType.ts
· BillingService
Aggiungi PlatformAdmin controller + servizio per borse di comp plan
- PlatformAdminController a /api/billing/platform (class-level @PlatformAdminOnly) - GET /orgs, GET /orgs/{orgId} - POST /orgs/{orgId}/grants, PATCH|DELETE /orgs/{orgId}/grants/{subId} - GET /plans (include èPublic=false) - GET / eventi - PlatformAdminService: la sovvenzione crea COMP SubscriptionRecord, cancella la prima attiva sub, emette SubscriptionEvent E' il momento giusto. 5s idempot - @PlatformAdminOnly + HandlerInterceptor: consentire dio-mode-attivo O (TeamMember.isOrganizationOwner AND Organization.isTopLevel, re-read from DB) - AbbonamentoRenewalScheduler: Il ramo COMP annulla alla scadenza (COMP EXPIRED) e mai chiama Stripe - BillingAdminService: L'aggregazione MRR/ARR esclude il pagamentoMethod=COMP - Long ids esposti come String (CockroachDB Unique rowid precision)
· InitializerService
Seed Organization.isTopLevel per kamocrm e OWNER UNLIMITED autocomp
- DataLoader: drop Organization Digitare arg da creareOrg, set isTopLevel=true su kamocrm - KamoCRMAgeReqUpdateRunner + test: match su IS TOP LEVEL = TRUE invece di TYPE - OrganizzazioneTypeRemovalRunner: Idempotent ALTER TABLE DROP COLUMN type - PlatformOwnerPlanSeeder: idempotently garantire kamocrm-owned OWNER UNLIMITED piano copre ogni caratteristica e detiene un abbonamento COMP permanente per sé
· kamo-shared-library
Aggiungere Organization.isTopLevel, PaymentMethod.COMP, tipi di eventi COMP *; rimuovere Organizzazione Tipologia
- Organizzazione: sostituire il campo `type` morto con la bandiera `isTopLevel` per l'identificazione del proprietario della piattaforma - PaymentMethod: aggiungi COMP per le borse gratuite di platform-admin (no Stripe) - AbbonamentoTipo: aggiungere COMP GRANTED, COMP REVOKED, COMP EXPIRED, COMP MODIFIED - OrganizzazioneRepository: aggiungere findFirstByIsTopLevelTrue() - OrganizationService: drop setType() call; i campi sono ora guidati da isTopLevel
· kamo-internal
Nascondi il pulsante di cancellazione per l'org originale dell'utente nella pagina di rete
· SecurityService
Impostare orgOriginal sulla registrazione ed esporre èOriginalOrg in mynetworks
· kamo-shared-library
Aggiungi campo orgOriginal all'Utente per monitorare la registrazione org
· kamo-internal
Diritti di sostegno dei richiedenti e visione dei biglietti a doppia modalità
- NavTop: mostrare SupportButton per qualsiasi diritto di supporto (agente o membro) - SupportButton: cancello ogni elemento a discesa a destra — creare / visualizzare i biglietti, Richiesta Webinar, My Webinars mostrato solo quando si tiene il diritto - SupportTicketListTab: dual-mode — gli agenti vedono la tabella completa con l'argomento filtrare e attivare le operazioni assegnate; i richiedenti dei membri vedono i propri solo biglietti (createdByMe=true), colonne semplificate, Nuovo Biglietto CTA - supporto/page.tsx: gate Biglietti/My Webinars/Analytics schede a destra - pagine delle impostazioni (account, reparti, integrazioni, operazioni): aggiungere CONFIGURE SYSTEM redirect guard; Impostazioni dashboard My Account sezione gated by CONFIGURE SYSTEM
· kamo-shared-library
Aggiungere diritti di sostegno ai richiedenti (133-136)
Aggiunge quattro nuovi diritti SUPPORT-scoped per i membri non esperti: - No, no. - CREATE SUPPORT TICKET (134) - REQUEST WEBINAR (135) - VIEW MY SCHEDULED WEBINARS (136)
· kamo-internal
Rimuovere i filtri delle colonne dalle schede membri e membri del team
· kamo-internal
Aggiungi il pulsante Sync Rights a SecurityRoleManager per gli org di alto livello
Pulsante è visibile solo quando l'organizzazione.hasParent è falso. Chiamate POST /api/security/roles/sync-rights poi ricarica la tabella dei ruoli.

Il tuo universo ti sta aspettando.
Aggiungi i prodotti quando sei pronto: nessuna migrazione, nessun nuovo login, nessuna richiesta di pagamento.
Gratis per sempre — nessuna carta di credito richiesta