Direkt zum Inhalt
KAMOUniverse

Changelog

Was ist neu?

Jede Verbesserung an der Plattform, wie sie geliefert wird.

  1. · SecurityService

    Theme-Bestimmung hinzufügen . NATS Publisher, Bereitstellung-Thema-Endpunkt, Logo-Upload

  2. · ConversionService

    Hinzufügen von Bild-Größe und Favicon-Generation Endpoints

  3. · InitializerService

    Migrationsläufer für logo_full_ext Spalte auf orgs hinzufügen

  4. · kamo-shared-library

    LogoFullExt-Feld zur Organisation hinzufügen; listObjects zu MinIOStorageService hinzufügen

  5. · kamo-internal

    Ersetzen Sie Emoji-Symbole mit soliden SVG-Symbolen auf erstellen Assistent Stepper

  6. · kamo-shared-library

    findBegrungsabfrage mit der abgeleiteten Anfrage von findByBranchType zu OrganizationRepository hinzufügen

    Unterstützt den neuen /branch-types/{id'/usages Endpoint in SecurityService um zu überprüfen, ob ein Zweigtyp aktives Kind hat, bevor das Lösen gespeisten werden.

  7. · SecurityService

    GET /branch-Typen/schöpfbar hinzufügen und /{id'/usages Endpunkte

    /creatable Rückrufe Zweigtypen, gefiltert durch den Herstellertyp des Anrufers (OWNERS/TEAM_MEMBERS/MEMBERS) via AppliedModelEnforcementService. /{id"/usages gibt die Anzahl und Zusammenfassung der unter einem erstellten Orgs zurück gegebene Zweig-Typ, von der Frontend verwendet, um harte Löschung zu blockieren.

  8. · kamo-internal

    Wache Zweigtyp Löschung gegen aktive Org-Nutzungen

    Vor dem Entfernen eines Zweigtyp-Chip, das Frontend ruft jetzt **************** Wenn irgendwelche orgs existieren, zeigt es ein Informationsdialog, der sie auflistet und den Admin anweist, den Typ deaktivieren, anstatt ihn zu löschen.

  9. · kamo-internal

    Live Support Ticket-Plassing auf NavTop - SupportCountContext abonniert NATS via STOMP, Abzeichen-Shows anhängig

  10. · MediaService

    Live pending support ticket count via NATS — notify org owner on new tickets, add pending-count REST endpoint

  11. · kamo-shared-library

    Zusätzliche Anzahl Feld zu SupportAgentNotificationDTO hinzufügen und Abfrage zu SupportTicketRepository zählen

  12. · kamo-internal

    Domain Name Feld zu org Erstellungsassistent hinzufügen

    Fügt dem Basics-Sritt ein benötigtes Domain-Feld mit automatischem www.-Streifung hinzu. Validiert, in API-Nläge enthalten und im Review-Sritt gezeigt.

  13. · kamo-marketing

    API-Modifikations-Callout zu Kamo-api-Referenz-Seite hinzufügen

    Gezeigt nur auf /kamo-api-Referenz, fordert Benutzer auf, API-Änderung einzureichen Anfragen über /Anfragen oder erreichen über /Kontakt.

  14. · SecurityService

    GET /branch-types/cretablen Endpunkt mit schöpfertypischer Filterung hinzufügen

    Gibt nur die Zweige, die das aufrufende Mitglied einrichten darf Kind org unter, basierend auf deren OWNERS/TEAM_MEMBERS/MEMBERS/MEMBERS-Klassifizierung gegen die aktuellen org's angewandten Sicherheitsmodelle. Spiegel genau gleich getBranchTypesCreatableBy Durchsetzung der POST /org Endpunkt gilt bei Einreichungszeit, damit das Frontend die Auswahlliste vorfiltern und vermeiden kann zeigt Optionen, die eine 403 produzieren würde. Antwort beinhaltet erlaubtMemberAgeRanges und allowedTeamMitgliedAgeRanges von jedem Zweig Typ Sicherheitsmodell, so dass die Benutzeroberfläche kann Gate AgeReqType Optionen in der gleichen Anfrage, ohne eine zweite Hin-und Rückfahrt.

  15. · kamo-internal

    Ersetzen Sie den OrganizationType-Zeischlag mit branchType/SecurityModel-Auswahl

    - OrgTypeStep (OrganizationType + Configuration Dropdowns) durch BranchTypeStep, der **************** holt neuer Endpunkt gibt nur Zweigtypen zurück, die der Anrufer erstellen darf ein Kind org unter, gefiltert durch ihre OWNERS/TEAM_MEMBERS/MEMBERS Klassifizierung gegen die angewandten Sicherheitsmodelle der Org - Entfernen Sie OrganizationType vollständig aus der Nutzlast; configType ist jetzt auto-abgeleitet von der Sicherheitsmodell erlaubt MitgliedschaftRanges (KIDS_ONLY - KIDS_CLUB, Teen-range - CLUB, anderes ENTERPRISE) - AgeRestrictionsStep filtert jetzt verfügbare AgeReqType-Optionen auf diese erlaubt durch das gewählte Sicherheitsmodell, mit einem Banner beim Gating aktiv; Nullalter (nicht angegeben) bleibt ein sicheres No-Op pro Backend - Nach erfolgreicher Erstellung zurückverweisen zu /setup/dns?orgId=&orgName= von die CURRENT org (nicht das neue Kind org) - DNS muss vor die neue org ist zugänglich - ************ hinzufügen Next.js Proxy Route - ReviewStep zeigt Zweigtyp Name + erlaubt Alterumfang statt alt org Typ / Konfiguration Typ Abzeichen

  16. · kamo-internal

    /Netzwerk schaffende Erm ungance ist nach Mitgliedstyp + rechts

    - BranchSetupManager: Neues "Wer kann Kinder-Orgs unter diesem Modell erstellen" Karte mit drei Toggles (Mitglieder / Teammitglieder / Eigentümer). Werte Rundreise durch mapBackendModel und beide sparen fließt (Kindermodell + Mastermodell). Leerer Zustand standardmäßig alle drei zu false - ein Modell bietet niemandem die Erstellung an, bis der Admin sie einschaltet. - /Netzwerkseite: holt **************** mount und versteckt jede "Create New Organization" Bezahlung (Header Button, empty-state-Button, Bottom-Karte) es sei denn, der Server endgültig zurückgegeben kannCreateChildOrg=true. Während der Check ist im Flug (null) die Erschwinglichkeit bleibt versteckt, so dass wir nie blinken an ein Mitglied, das es nicht sehen sollte. - Neue ************ Proxy Route vorwärts bis zum neuen Endpunkt von SecurityService.

  17. · SecurityService

    Gate /network kind-org-Erstellung durch rechts + Member-Typ Anwendbarkeit

    Wires die Anwendungs-Sicherheit-Modell Kind-Orgie-Kreation-Gate Ende-zu-Ende: - SecurityModelController + MasterModelController Hin- und Rückfahrt der drei neuen Anwendung-auf-Flagge (betrifft Mitglieder / applyToTeamMitglieder / applytoBesitzers) durch Erstellung und Aktualisierung von Nutzlasten. - Neue GET ************ löst für Caller-Sitzung - der Schöpfer-Typ Eimer sie fallen in, ob ihre Rolle trägt CREATE_CHILD_ORG, die Liste der Zweigtypen, die ihnen zur Verfügung stehen, und eine kombinierte canCreateChildOrg boolean die /network-Seite verwendet, um sich zu verstecken die Schaffung von Bezahlung, wenn falsch. - **************** lehnt jetzt mit 403 ab Caller fehlt CREATE_CHILD_ORG oder wählt einen Zweigtyp, der nicht unter die ihr Schöpfer-Typ angeboten wird - Verteidigung in der Tiefe gegen einen Kunden dass das UI-Gate umgeht.

  18. · kamo-shared-library

    Mitgliedstyp-Gate + CREATE_CHILD_ORG richtig für Kinder-Ort-Erstellung

    Fügt die Datenschicht für gating /network child-org-Erstellung nach Mitgliedstyp hinzu: - Neu CREATE_CHILD_ORG rechts auf RoleRightType (id 131). - Drei neue boolesche Spalten über ChildOrgSecurityModel: applyToMembers / applyToTeamMembers / applyToOwners Wenn das stimmt, werden die Zweigtypen des Modells diesem Mitglieds-Typ-Eimer angeboten. auf /network. Ein Modell mit allen drei Falsch ist nie als Schöpfung aufgetaucht Option für jedermann - es regelt nur bestehende orgs. - ChildOrgSecurityModelService erhält 13-arg erstellen/update Überlastungen, die neuen Flaggen akzeptieren; die alten 10-arg-Signaturen delegieren sich durch. - ChildOrgSecurityModelDTO rund umrundet die drei Flaggen. - AppliedModelEnforcementService entlarvt die Gate-Logik, dass jeder Anrufer Aktien: enum ChildOrgCreatorType { MEMBERS, TEAM_MEMBERS, OWNERS getBranchTypesCreatableBy(org, creatorType) - die Liste der Zweigtypen die zu Modellen gehören, die für diesen Schöpfertyp gelten und haben bei mindestens ein Zweigtyp. ************ creatorType) - boolean predicate. Creator-Typ-Klassifizierung: OWNERS = Team-Mitglieder mit istOrganisationOwner=true, TEAM_MEMBERS = andere Teammitglieder, MEMBERS = alle anderen. Rechtsprüfung (CREATE_CHILD_ORG) wird absichtlich NICHT gebacken in diese Helfer - Anrufer kombinieren beide Kontrollen, so dass der Helfer auch zurück read-only Abfragen.

  19. · InitializerService

    Master-Modell gilt für alle drei Mitgliedstypen auf init

    vorbestelltMaxedOutMasterModel gilt jetzt für Mitglieder, gilt fürTeammitglieder, und giltToOwner alle wahr, so dass jeder Mitgliedstyp sieht das Master-Modell Zweigtypen als Erstellungsoptionen auf /network. Die Vorlage des Administrators weiterhin alle RollenRightType einschließlich der neuen CREATE_CHILD_ORG rechts (id 131) durch iterierende RolleRightType.values().

  20. · kamo-marketing

    Fügen Sie Millisekunden zum Start Countdown, tick alle 50ms

  21. · kamo-marketing

    Ersetzen statische Starttermin mit Live-Countdown zu 2PM PST 20.2026

    Zecken jede Sekunde zeigt Xd XXh XXm XXs; fällt zurück auf statisches Datum bis der Kunde Hydrate, zeigt "Jetzt", wenn Ziel erreicht wird.

  22. · InitializerService

    Administrator Standard-Rollenvorlage beginnt mit allen Rechten GRANTED

    vorbehaltlichMaxedOutMasterModel pulsiert nun die Administrator-Vorlage mit jeder RoleRightType-Set auf GRANTED. Die anderen drei Vorlagen (Teammitglied, Mitglied, DEFAULT) materialisiert sich immer noch mit Null-Rechten (NOT_SPECIFIED für alles, passend zur vorgesehenen leeren Grundlinie für Nicht-Admin-Rollen. Warum GRANTED (nicht FORCE_GRANTED): bei Child-Orig-Erstellungszeit ChildOrgTemplateSeedingService kopiert nicht-force-Template-Werte in die neue org's OrgRoleRight Reihen, so dass eine GRANTED Admin-Vorlage jedes neue Kind gibt org eine funktionsfertige Admin-Rolle mit vollen Berechtigungen, die der Besitzer noch kann bearbeiten. FORCE_GRANTED würde Rechte bei der Laufzeit sperren und sie vor der Sicherheits-Rollen-Editor, die wir nicht für die Admin-Vorlage Basislinie wollen.

  23. · InitializerService

    Bereitstellung eines maxed-out Master-Sicherheitsmodells für KamoCRM auf init

    DataLoader erstellt und weist nun ein Master ChildOrgSecurityModel zu KamoCRM unmittelbar nach der Erstellung der Org, mit jeder Einstellung maxed Aus auf den freizügigsten / Kraft-fähigen Wert: - allowOwnersViewOtherOrgs / allowOwnersPrivateOrgs / allowSubChildOrgs = true - identityProviderSetting = ENABLED - teamMemberPayFeesSetting = FORCE_ENABLE - erlaubtMemberAgeRanges / allowedTeamMitgliedAngeänder = jeder AgeReqType - appConfigs = jeder nicht-veralte ServiceType bei FORCE_ENABLED, mit CRM's erlaubteCommerceTypes mit jedem CommerceType - Organisation.masterModelID auf das neue Modell eingestellt Die vier Standard-Rollenvorlagen (Administrator / Teammitglied / Mitglied / DEFAULT) sind mit Null-Rechten materialisiert, so dass die UI macht Tabs für jeder - jedes Recht bleibt NOT_SPECIFIED zur Laufzeit, dem vorgesehenen Leerzeichen Basislinie. Admins können bestimmte Kraftregeln später über die Zweigtypen bearbeiten tab. Auch Beulen Kamo-Shared-Bibliothek auf 1.5.0 so die neue ChildOrgSecurityModelService / AppConfigService / DefaultRoleService und verwandte Typen lösen sich beim Kompilieren auf.

  24. · kamo-internal

    FeaturesManager ehrt angewandtes Modell force-fähigen Zustand

    Akzeptiert das neue ModellAvailability + gesperrte Felder von FeatureController und stellt sie in der Benutzeroberfläche auf: - Features, deren ModellVerfügbarkeit ist FORCE_ENABLED machen das Einschalten die auf Zustand, deaktiviert, mit einem erklärenden Tooltip - Admins sehen können sie sind an, können sie aber nicht abklappen. - Ein modelForced Feature-Short-Circuuits mit klarem Toast statt als ein allgemeiner Fehler aus dem Backend 403. - NOT_AVAILABLE-Funktionen erreichen nie den Client (gefilterte Server-Seite) so ist die UI-Liste bereits die gated view.

  25. · SecurityService

    Applied-Modell ist die Lesezeit Quelle der Wahrheit für Feature-Verfügbarkeit

    Schließt die "stale DB Leicht eine deaktivierte Funktion" Lücke durch Gating jede Oberfläche dass OrgFeature / ServiceType durch das angewandte Sicherheitsmodell berührt. - ************ (der Hauptzubringer des Frontends OrgContext): ersetzt die Rohfeatures Serialisierung mit ************ org.getFeatures()). Die Auto- Bereitstellungsschleife überspringt jetzt auch Apps die Modellmarken NOT_AVAILABLE so Wir erstellen nie DB-Reihen für blockierte Apps. - FeatureController.list: gibt jedes Feature mit modelVerfügbarkeit zurück + gesperrte Metadaten. NOT_AVAILABLE Zeilen werden herausgefiltert, FORCE_ENABLED Zeilen werden als aktiviert=true + gesperrt=true gemeldet, unabhängig von ihrem DB-Zustand. Die verfügbare Liste wird auch auf Apps heruntergefiltert, die das Modell erlaubt. - Neue AppAvailabilityInterceptor + WebMvcConfig: installiert eine HandlerInterceptor auf jedem service-scoped URL-Präfix (/api/security/pos, /api/security/commerce-markets, /api/security/leads*, /api/security/lead- Importe, /api/security/Lead-markets, /api/security/Lead-Viglings, **************************************** **************** Jede Anfrage ist auf eine ServiceType, gegen das angewandte Modell des Anrufers gelöst und abgelehnt mit HTTP 403, wenn die App effektiv ausgeschaltet ist. Dies ist die letzte Zeile von Verteidigung: auch mit abgestandenen Klientenzustand, einem vergessenen Kontrollposten oder eine blockierte App, die per Post zurück 403. Nettoeffekt: Das angewandte Sicherheitsmodell gewinnt jetzt überall bei der Lesezeit die Funktionen oder Apps der Org sind freigelegt - Navigation, Startseite, Einstellungen slide-out, FeaturesManager, pro Betrieb Endpunkte. Wenn der Admin umdreht CRM zu NOT_AVAILABLE auf dem Modell, die CRM-UI verschwindet vom Frontend und CRM-Endpunkte beginnen 403'ing - unabhängig davon, ob die DB noch OrgFeature.isActive=true für CRM.

  26. · kamo-shared-library

    Effektive-Feature-Resemiter für angewandte Modell Lesezeit-Gating

    Fügt das Lese-Zeit-Gate hinzu, das das angewandte Sicherheitsmodell zum letzten macht Quelle der Wahrheit für Feature-Verfügbarkeit, so abgestandene DB-Zustand kann nicht undicht deaktiviert durch und eine kraftfähige Funktion ist immer sichtbar auch wenn die DB nicht aufgeholt hat. Neue Methoden auf AppliedModelEnforcementService: - computeAvailabilitiesMap(org) - One-Pass-Auflösung für jeden ServiceType Verfügbarkeit für eine Org in einer einzigen Suche. Dient als die Charge primitive die anderen neuen Methoden aufbauen. - isAppffectivelyEnabled(org, serviceType, features) - der kanonische "ist diese App on" überprüfen. Kernleistungen immer an, immer abgehoben, FORCE_ENABLED immer an, NOT_AVAILABLE immer off; OPTIONAL_* vertagt zu der isActive Zustand der OrgFeature Reihe. - ************-Features) - das Set<ServiceType Begleiter für Anrufer, die "alle effektiv auf Apps" als Set benötigen. - computeEffectiveFeatures(org, features) - gibt eine frische ArrayList von OrgFeature-Reihen durch das Tor projiziert: NOT_AVAILABLE fallen gelassen, FORCE_ENABLED zum Aktiven gezwungen (auch bei deaktivierten DB-Reihen) und FORCE_ENABLED Apps ohne DB-Reihe, die noch von transienten Zeilen dargestellt werden (organisatorisch - nie bestanden). Anrufer serialisieren die Funktionen eines Orgs an Clients jetzt durch berechnenEffectiveFeatures anstatt das Lesen der rohen Sammlung, so dass die frontend sieht die anwendbare Modell-gated Ansicht standardmäßig.

  27. · kamo-internal

    Fügen Sie pro-assocType-Doc-Einstellungen mit doc-Typen, Stacking-Aufträge und Konfigurations-Panels

    Ersetzen Sie ComingSoonTab auf /settings/features/docs durch eine vollständige Einstellungsschnittstelle: - Übersichtskarte + ein Tab pro ImageAssocType (Account, Service Application, Service Order, Call Recording, My Docs, Meet Recording, System-Wide) - Jeder AssocType-Tab hat 3 Sub-Tabs: Konfiguration (folder/docType-Funktions-Tebel), Doc-Typen (voller CRUD), Stacking Orders (CRUD mit visueller Pipeline-Schiebestelle) - Next.js API Proxy-Routen für alle Bildeinstellungen Endpunkte - AssocConfigPanel, DocTypesManager, StackingOrdersManager, StackingOrderDrawer, AssocTypeSettings Komponenten

  28. · DocsService

    ImagingSettingsController mit doc type, Stacking Order und assoc config CRUD hinzufügen

  29. · kamo-shared-library

    ImgAssocConfig Entität, Repository und sortOrder to ImgStackingOrderDt hinzufügen

  30. · InitializerService

    FEATURE_REQUESTS zur Support-Kategorie und alle Plan-Feature-Mappings hinzufügen

    Frei: Gemeinschaftsabstimmung, Starter: Abstimmung & Antrag, Business: Priority-Anfragen, Enterprise: Custom dev enthalten

Euer Universum wartet.

Fügen Sie Produkte hinzu, wann immer Sie möchten – keine Migration, keine neuen Anmeldungen.

Für immer kostenlos – keine Kreditkarte erforderlich