Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· kamo-marketing
Aggiungi /richiede collegamenti nav diretti, homepage sezione, e pianificare funzionalità confronto riga
- Header: Richieste aggiunte come collegamento diretto di alto livello tra Prezzo e Azienda - Footer: Richieste aggiunte alla colonna Prodotto per visibilità diretta - Pagina dei prezzi: banner personalizzato dev callout tra fasci e confronto delle caratteristiche - Caratteristiche pagina: richiesta di funzionalità callout prima CTA - Homepage: nuova sezione FeatureRequests tra Prezzi e FAQ che mostra l'accesso plan-tier - JumpToBar: Richieste link di salto aggiunto tra Prezzi e FAQ - DB: FEATURE REQUESTS seme nella categoria Support con valori di testo per piano (Free: Community vota, Starter: Vota & richiesta, Business: Priority request, Enterprise: Custom dev included) - KamoCRMPricingLoader: aggiornato con la definizione della funzione FEATURE REQUESTS e mappature plan-feature
· kamo-internal
App di andata e ritornoConfig + impostazioni di modellazione della superficie applicata + toggle
- BranchSetupManager: mapBackendModel ora idrata l'app persistedConfigs restituito dal backend (disponibilità + consentitoCommerceTypes per servizio tipo) invece di ripristinarli a NON DISPONIBILE sul carico. Salvare i carichi di pagamento sia per il modello bambino che i flussi master-model includono appConfigs in modo da per-app disponibilità e CRM-tipo restrizioni commercio-tipo round-trip. Maestro modello editor riutilizza mappaBackendModel in modo che si comporta in modo identico. - useAppliedModel gancio: tipo di risposta espansa ora trasporta l'applicazione impostazioni scalari del modello (consenti ai propri utentiViewOtherOrgs, permettono ai propri clientiPrivateOrgs, consentireSubBambini, fasce di età, identitàProviderSetting, teamMemberPayFeesSetting), l'appConfigs mappa, e orgIsPrivate — quindi qualsiasi futuro editor (feature manager, OAuth config, mercato del commercio) può gate uniformemente senza riguadagnare. Un nuovo percorso di proxy. (PATCH) e una scheda di visibilità sulla scheda ramifica-tipi, gated da consentire ai propri proprietariPrivateOrgs. Quando abilitato, altri proprietari di org non vedranno questo org in inserzioni. L'UI ottimistica si riconcilia con il prossimo modello applicato rinfrescati.
· BillingService
Enforce team-member pay-fees setting at Stripe customer creation
Bumps kamo-shared-library dependency to 1.5.0 so BillingService can resolve the new AppliedModelEnforcementService, and wires team-member vs org pay-fees enforcement into **************** - teamMemberPayFeesSetting == NOT_AVAILABLE: creating a member-specific billing customer (self-pay) is rejected — the org must cover fees. - teamMemberPayFeesSetting == FORCE_ENABLE: creating an org-level customer that would cover team-member charges is rejected — team members must pay themselves. - OPTIONAL: either flow is permitted. Enforcement is best-effort when the org can't be resolved (tooling contexts, legacy data) — falls through to the legacy behavior instead of blocking.
· SecurityService
Wire applied-model enforcement across every controller
Every non-role setting on the applied security model is now enforced at the exact controller boundary it governs, and the scalar settings round-trip cleanly through the master/child model editors so the UI can gate on them. - **************** when branchTypeID is set, look up the branch type to derive the parent org; call assertSubChildOrgAllowed and assertAgeRangeAllowed for both member and team-member age slots before committing. New PATCH /{id}/visibility endpoint lets owners flip Organization.isPrivate, gated by assertCanSetPrivate. getAllOrganizations applies filterVisibleOrgsForViewer so results respect both allowOwnersViewOtherOrgs on the viewer's model and the isPrivate flag on candidates. - **************** call assertAppEnableAllowed / assertAppDisableAllowed so NOT_AVAILABLE apps can't be enabled and FORCE_ENABLED apps can't be disabled. - OAuthConfigController POST/PUT: assertCanManageIdentityProvider blocks provider CRUD when identityProviderSetting == NOT_AVAILABLE. - CommerceMarketController POST/PUT: assertCommerceTypeAllowed rejects a commerce type not listed in the model's appConfig for CRM. - SecurityModelController + MasterModelController: round-trip appConfigs through create/update payloads and the GET responses. New processAppConfigs helper accepts the list form used by the frontend editor. - AppliedModelController: response now includes the full scalar settings block (allowOwnersViewOtherOrgs, allowOwnersPrivateOrgs, allowSubChildOrgs, age ranges, identityProviderSetting, teamMemberPayFeesSetting) and the appConfigs map so frontend editors can gate uniformly. Also surfaces orgIsPrivate so the privacy toggle stays in sync.
· kamo-shared-library
Applicare ogni impostazione non-rolo su ChildOrgSecurityModel
Aggiunge l'applicazione end-to-end per le impostazioni rimanenti su un org applicato modello di sicurezza. Tutte le impostazioni che in precedenza era stato letto solo (o salvare) ora ha un percorso di persistenza, un helper di esecuzione, e un'interfaccia utente gancio per consumarlo. strato di dati: - Organization.isPrivate (colonna booleana, falso predefinito) — org propria flag di visibilità, impostato attraverso il nuovo MasterModelController-gated PATCH endpoint. - ServizioDisponibilità Tipo enum (OPTIONAL DEFAULT ENABLE / OPTIONAL DEFAULT DISABLED / NOT AVAILABLE / FORCE ENABLED). - ChildOrgSecurityModelAppConfig entità + repo + servizio — persiste per-app disponibilità (e CRM ha consentitoCommerceTypes) in precedenza è caduto su salvare. - No, no. torna alla nuova entità. Esecuzione runtime: - AppliedModelEnforcementService consolida ogni controllo utilizzato dai chiamanti: asserireSubChildOrgAllowed, affermareAgeRangeAllowed, Non e' vero. isIdentityProviderRequired, assertCanSetPrivate, filtroVisibleOrgsForViewer, affermareTeamMemberCanSelfPayFees, èTeamMemberPayFeesForced / Blocked, assertAppEnableAllowed, assertAppDisableAllowed, getAppAvailability, getDefaultEnabledAppsForChild, assertCommerceTypeAllowed, ottenereAllowedCommerceTypes. Null-safe: "nessun modello applicato" permette tutto. - ChildOrgTemplateSeedingService esteso anche alle file OrgFeature del seme predefinito appConfig del genitore (FORCE ENABLED e OPTIONAL DEFAULT ENABLED) su nuovi org, così nuovi org Vieni con la superficie predefinita giusta.
· kamo-internal
Bloccare ruoli di sistema obbligatori nell'interfaccia utente
- PublicProvider: ammettere branchTypeID/masterModelID sul incoming organizzazione payload in modo che la scheda dei tipi di ramo può in modo affidabile gate il Pulsante "Edit Master Model" (precedentemente basato sulla serializzazione Jackson scorrendo attraverso il tipo di oggetto di controllo). - RolesPermissionsTab: la griglia di controllo ruolo ora segna il sistema richiesto ruolo(i) come controllato e disabilitato in base al tipo del membro e la bandiera del proprietario: * Membri di tipo membro: "Membri" è richiesto. * Membri di tipo Team-Member: "I membri del team" è richiesto. * Proprietari di tipo Team-Member: "Administrator (Accesso completo)" è inoltre richiesto. Un chip "richiesto" e un accenno esplicativo rendono visibile il vincolo editore. Tentare di attivare un ruolo obbligatorio è un no-op; il backend la riconciliazione in MemberSecurityController lo avrebbe ri-aggiungeto comunque.
· SecurityService
Enforce system-role assignment and auto-admin for team-member owners
MemberSecurityController now enforces the three assignment invariants defined in the brainstorm spec: - saveMemberSecurity: before persisting the caller's requested roleIds, augments the set with the mandatory system role(s) based on member type: Member-typed members always get roleMemberID; Team-Member-typed members always get roleTeamMemberID; Team-Member owners additionally always get roleAdminID. LinkedHashSet preserves caller ordering while deduping. - updateMemberAccess: when the owner flag toggles, the Administrator role is added or removed on the team-member to keep role assignments in sync with ownership. Rights-applied recalculation runs in the same transaction so downstream reads see the updated effective permissions immediately.
· kamo-shared-library
Applicare le regole della forza modello e il fallback DEFAULT alla risoluzione dei diritti membri
# Now overlays the applicata # modello 4 modelli di default-role in cima alla cascata esistente ( ruoli diorg → dipartimento → titolo di lavoro → membro): - FORCE GRANTED/FORCE NUKE vince su tutti i livelli di cascata. Il modello è scelto per tipo di membro: uso dei proprietari di squadra ADMINISTRATOR, i membri della squadra usano TEAM MEMBER, i membri semplici usano MEMBER. - I valori FORCE del modello DEFAULT vincono sopra la cascata quando il modello di tipo di ruolo non ha alcuna regola di forza per quel diritto (per la precedenza Q7). - I valori non di forza DEFAULT (GRANTED/NUKE) fungono da ultima linea di difesa diritti che hanno deliberato a NOT SPECIFIED dopo l'intera cascata. AppliedModelResolverService viene iniettato come @Autowired (required=false) in modo da cablaggi esistenti che costruiscono solo i due costruttori-obbligatori i repository continuano a funzionare, degradando al percorso legacy no-force-rules.
· kamo-internal
Aggiungi editor modello master, modelli di ruolo e gating forza-rule
Supera il nuovo modello di sicurezza a ramo nell'interfaccia utente: - la scheda dei tipi di branch guadagna un pulsante "Edit Master Model" (nascosto quando il org ha un branchTypeID assegnato) che apre l'editor del modello in master modalità: nessun campo di nome, nessun chip di tipo branch, salvare colpi /master-model. - Editor di modelli (sia add-child-model che edit-master-model) ottiene un nuovo Sezione "Default Security Roles" dopo "Allowed Apps", con schede per Amministratore / Team Member / Member / DEFAULT e impostazioni a 5 valori (FORCE GRANTED, GRANTED, NOT SPECIFIED, FORCE NUKE, NUKE). - Nuovo usoAppliedModel() gancio fetches /api/security/applied-model una volta e espone èForced(destra, roleType) per il consumo di editor. - ruoli di sicurezza, dipartimenti, titoli di lavoro e ruoli per-membro-permissioni pagine nascondere i diritti forzati bloccati dai modelli applicabili: * regole di sicurezza: i ruoli di sistema utilizzano il modello corrispondente + DEFAULT; ruoli personalizzati utilizzano solo DEFAULT (Q11 risposta A). * reparti + posti di lavoro: solo DEFAULT (non-role-specifico). * pagina dei membri: modello di tipo membro (TEAM MEMBER vs MEMBER) + DEFAULT (Q8 risposta C, primo ordine di valutazione di tipo). Nuovi percorsi proxy: /api/security/master-model (GET/PUT), /api/security/applied-model (GET).
· SecurityService
Master-model + applied-model endpoints and template-aware org seeding
Adds the controllers that surface the new branch-type security flow: - /api/security/master-model (GET/PUT) manages the current org's master model; only writeable when Organization.branchTypeID is null. - /api/security/applied-model (GET) resolves which model governs this org and returns per-template force-rule maps for frontend gating. - SecurityModelController round-trips the 4 default-role templates as part of its existing create/update payloads. - OrganizationController propagates the new branchTypeID from the request body and seeds the new org's 3 system roles from the applied model's templates via ChildOrgTemplateSeedingService.
· kamo-shared-library
Aggiungi modello master, modelli di ruolo predefinito e risolutore modello applicato
Introduce lo strato di dati per il nuovo flusso del modello di sicurezza di tipo branch: - L'organizzazione guadagna ramo nullableTypeID e colonne masterModelID. - Nuovo RoleRightTemplateSetting Digitare enum con 5 valori (FORCE GRANTED, GRANTED, NON SPECIFIED, FORCE NUKE, NUKE) per le impostazioni di template-layer. - New DefaultRoleType enum (ADMINISTRATOR, TEAM MEMBER, MEMBER, DEFAULT) per i 4 modelli di ruolo allegati a ogni ChildOrgSecurityModel. - Nuove entità... In piu' i loro repos, il servizio e i DTO. - AppliedModelResolverService risolve il modello che governa un determinato org (branchType-inherited o master) e espone le lookup forza-rule. - ChildOrgTemplateSeedingService sementi nuovi ruoli di sistema dei bambini con Valori GRANTED/NUKE dai modelli del modello applicato; nel modello e sono applicati a runtime. L'utente finale OrgRoleRight continua a utilizzare il 3-valore RoleRightSettingType — i valori di forza sono rigorosamente un concetto di template-layer.
· kamo-internal
Aggiungi campo di chip-input di tipo branch all'editor del modello di sicurezza
- BranchTypeChipField con dot toggle colorato, etichetta di editing-on-click e X delete - BranchTypeEditDialog per la modifica di nome/descrizione - Autocomplete dropdown tira da GET /api/security/branch-types, esclude i tipi di modello attuali, mostra il modello sorgente per i tipi cross-model - manigliaSaveModel invia branchTypes e cancellatoBranchTypeIds in PUT/POST payload - Lista tabella ottiene Branch Tipi colonna con chip punti colorati - loadModels mappe branchTypes da risposta backend
· kamo-login
Rimuovi MANAGE USERS direttamente da RoleRightType
· kamo-register
Rimuovi MANAGE USERS direttamente da RoleRightType
· kamo-internal
Rimuovere MANAGE USERS direttamente da tutti i riferimenti frontend
· kamo-shared-library
Rimuovi MANAGE USERS right (id=19) da RoleRightType enum
· kamo-internal
Aggiungi route API di sicurezza dei rami
· SecurityService
Wire branch types into security model CRUD endpoints
· kamo-shared-library
Expand ChildOrgSecurityModelDTO con campi completi e branchTypes
· kamo-shared-library
Aggiungi OrgBranchTypeService
· kamo-shared-library
Aggiungi OrgBranchTypeRepository
· kamo-shared-library
Aggiungi OrgBranchTypeDTO
· kamo-shared-library
Aggiungi OrgBranchTipo entità
· kamo-internal
Aggiornare BranchSetupManager sottotitolo per riferimento etichetta di tipo dinamico ramo
· kamo-internal
Rinominare la scheda Impostazione Branch a {branchLabel} Tipi e aggiornare l'URL a tipi di branch
· kamo-login
Reset Capcha *** dopo ogni tentativo di login fallito
Gli utenti devono ri-verificare sono umani dopo ogni password errata. Chiama widget.reset() e cancella CapchaVerified/payload stato su guasti delle credenziali e errori di rete.
· EmailService
Auto-inject logoUrl, logoSimpleUrl, and orgName variables at send time
EmailTemplateService now merges base variables (logoUrl, logoSimpleUrl, orgName) derived from the org's primary domain before rendering, so all transactional templates can reference {{logoUrl}} and {{logoSimpleUrl}} without callers needing to pass them explicitly. Caller-supplied vars still take precedence.
· kamo-internal
Aggiungi i cancelli di autorizzazione per i campi di livello utente e la sezione cambio password in MyAccountTab
· kamo-internal
Aggiungi il cancello di accesso e la scheda MANAGE MEMBER SECURITY alla pagina delle impostazioni dei membri
· kamo-internal
Aggiungi change-password Next.js API proxy route

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