Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· SecurityService
Dodaj przepisy tematyczne — wydawca NATS, punkt końcowy, przesłanie logo
· ConversionService
Dodaj obraz resize i favicon generationpoints
· InitializerService
Dodaj migrację dla kolumny logo_full_ext na orgs
· kamo-shared-library
Dodaj poleFullExt do podmiotu organizacji; dodaj listęObjects do MinIOStorageService
· kamo-internal
Zamień ikony emoji na solidne ikony SVG na kreatorze stepper
· kamo-shared-library
Dodaj findBranchTypeID zapytań z pochodnie do OrganizationRepository
Obsługuje nowy /branch-typy/a--, punkt końcowy w SecurityService w celu sprawdzenia, czy rodzaj oddziału ma aktywne orgi przed usunięciem.
· SecurityService
Dodaj punkty końcowe GET /branch-types/kreatable i /-id/usages punkty końcowe
/krealny typy gałęzi zwrotów filtrowanych przez typ twórcy dzwonionego (OWNERS/TEAM_MEMBERS/MEMBERS) za pośrednictwem AppliedModelEnforcementService. /-id/usages zwraca liczbę i podsumowanie org utworzonych w ramach Nadano rodzaj gałęzi, używany przez frontend do zablokowania twardej delecji.
· kamo-internal
Skreślenie typu rozgałęzienie osłony przed aktywnymi użyciami org
Przed usunięciem chipa typu gałęzi, frontend teraz dzwoni Jeśli istnieją jakieś orgi, to pokazuje dialogowe informacyjne wymieniające je i instruuje administratora, aby Unieważniaj typ zamiast go usuwać.
· kamo-internal
Napis biletowy na żywo na NavTop — SupportCoContext subskrybuje NATS via STOMP, odznaki oczekujące na liczenie
· MediaService
Live pending support ticket count via NATS — notify org owner on new tickets, add pending-count REST endpoint
· kamo-shared-library
Dodaj pole do liczby oczekujących do SupportAgentNotificationDTO i zlicz zapytanie do SupportTicketRepository
· kamo-internal
Dodaj pole nazwy domeny do kreatora kreacji org
Dodaje pole domeny do kroku Podstawy z automatycznym www. stripping. Zatwierdzony, uwzględniony w ładunku API i pokazany w kroku recenzji.
· kamo-marketing
Dodaj wywołanie modyfikacji API do strony kamo-api-reference
Pokazany tylko na /kamo-api-reference, zachęca użytkowników do przesłania zmiany API Żądania za pośrednictwem /odpytania lub dotarcia do /kontaktu.
· SecurityService
Dodaj GET /branch-typy/kreatny punkt końcowy z filtrowaniem typu twórcza
Zwraca tylko typy oddziałów, które członek dzwonienia może utworzyć Pod adresem lubg dziecięcy, na podstawie klasyfikacji OWNERS/TEAM_MEMBERS/MEMBERS W stosunku do aktualnych modeli zabezpieczeń org. Lustra dokładnie to samo getBranchTypesCreatable W ramach egzekwowania stosuje się punkt końcowy POST /org Czas zgłoszenia, dzięki czemu frontend może wstępnie filtrować listę wyboru i uniknąć Pokazywanie opcji, które wytworzyłyby 403. Odpowiedź obejmuje dozwoloneCzteryAgeRanges i dozwoloneTeamMemberAgeRanges Z każdego modelu bezpieczeństwa typu gałęzi, dzięki czemu UI może zdobyć bramkę AgeReqType Opcje na tej samej prośbę, bez drugiej podróży w obie strony.
· kamo-internal
Zamień krok kreatora OrganizationType z gałęziType / SecurityModel wybór
- Zamień OrgTypeStep (OrganizationType + rozwijanie konfiguracji) BranchTypeStep, który się ładuje - Nowy punkt końcowy zwraca tylko typy gałęzi, które dzwoniący może tworzyć podkażniki lubg dziecięcego, filtrowanego przez ich OWNERS/TEAM_MEMBERS/MEMBERS Klasyfikacja względem zastosowanych modeli zabezpieczeń org - Usuń organizajType z ładunku w całości; configType jest teraz Auto-wyjście z modelu bezpieczeństwa dozwoloneMemAgeRanges (KIDS_ONLY - KIDS_CLUB, przedział dla nastolatków - CLUB, w inne ENTERPRISE) - AgeRestrictionsStep Filtruj teraz dostępne opcje AgeReqType do tych Dozwolone przez wybrany model bezpieczeństwa, z banerem podczas ściskania Wiek aktywny; nieokreślony (nieokreślony) pozostaje bezpiecznym no-op na zapleczu - Po udanej kreacji przekierowanie do /setup/dns?orgId&orgName CURRENT org (nie nowy org) — DNS musi być skonfigurowany przed Nowy org jest dostępny - Dodaj ? Trasa proxy Next.js - ReviewStep pokazuje nazwę typu branch + dozwolony zakres wieku zamiast starego Odznaki typu org / config typu
· kamo-internal
/sieciowa afordza tworzenia jest omówna przez typ członka + prawo
BranchSetupManager: nowy "Kto może tworzyć orgi dziecięce pod tym modelem" Karta z trzema przełącznikami (członkowie / członkowie zespołu / właściciele). Wartości W obie strony przez mapęBackendModel i oba oszczędzają przepływy (model dziecka + model główny). Państwo puste domyśli się do fałszywych wszystkich trzech do fałszywych — model Nie oferuje nikomu tworzenia, dopóki administrator ich nie zdecyduje. - /network page: fetches - Zamontuj i ukrywa każdą „Utwórz nową organizację” (główek Przycisk, pusty stan, dolna karta), chyba że serwer Ostatecznie zwrotyCUCrecoDOrg?true. Podczas gdy czek jest W locie (null) afordanance pozostaje ukryta, więc nigdy jej nie błysnęliśmy Do członka, który nie powinien tego widzieć. - Nowe ? Przekierowywanie proxy Do nowego punktu końcowego SecurityService.
· SecurityService
Brama / sieciowe tworzenie dzieci-org przez prawo + aplikacja typu członka
Przewody stosowanego modelu bezpieczeństwa-rodzima kreacyjna od końca końca: - SecurityModelController + MasterModelController w obie strony w obie strony aplikować do flag (dotyczyToMembers członkowskie / zastosowanieToTeamMembers / applyToOwners) twórz i aktualizuj ładowności. - Nowy GET - rozwiązania - dla Sesja rozmówcy – wiadro typu twórcza, w które wpadają, czy to ich rola nosi CREATE_CHILD_ORG, listę dostępnych dla nich typów gałęzi, I łączony canCreateChildOrg boolean, którego strona /network używa do ukrycia Stwórz afordu, gdy jest fałszywe. - teraz odrzuca 403, gdy dzwoniące nie ma CREATE_CHILD_ORG lub wybiera typ gałęzi, który nie jest wśród nich Te, które ich twórca jest oferowany – dogłębnie obrona przed klientem To omija bramę UI.
· kamo-shared-library
Brama typu członkowskiego + CREATE_CHILD_ORG odpowiednia do tworzenia dziecka-org
Dodaje warstwę danych do tworzenia danych dla gating /network child-org według typu użytkownika: - Nowy CREATE_CHILD_ORG na RoleRightType (id 131). - Trzy nowe kolumny boolean na ChildOrgSecurityModel: ObowiązkiToMembery / stosujeToTeamMembers / applyToOwners Jeśli to prawda, typy gałęzi modelu są oferowane do wiadra typu członkowskiego Na /sieć. Model z wszystkimi trzema fałszywymi nigdy nie pojawia się jako stworzenie. Opcjonalnie dla każdego – rządzi tylko istniejącymi orgami. - ChildOrgSecurityModelSecur otrzymuje 13-arg create/aktualizuje przeciążenia, które Przyjmować nowe flagi; dziedzictwo 10-arg podpisów deleguje. - ChildOrgSecurityModelDTO w obie strony łączy trzy flagi. - AppliedModelEnforcementService ujawnia logikę bramy, że każdy dzwoniący Akcje: Enum ChildOrgCreatorType - Mężnicy, TEAM_MEMBERS, OWNERS getBranchTypesCreatableBy(org, creatorType) - lista typów gałęzi Należą one do modeli, które mają zastosowanie do tego typu twórcy i mają na Przynajmniej jeden typ gałęzi. Type) - boolean predykat. Klasyfikacja typu twórczość: OWNERS - członkowie zespołu organizationOwner, TEAM_MEMBERS - inni członkowie zespołu, MEMBERS Wszyscy inni. Prawy sprawdzanie (CREATE_CHILD_ORG) jest celowo NIE pieczone W tych pomocnikach — dzwoniący łączą obie czeki, aby pomocnik mógł również Odzyskiwanie tylko do odczytu.
· InitializerService
Model Master odnosi się do wszystkich trzech typów członków onit
Przepis MaxedOutMasterModel stosuje terazToMembers, stosujeToTeamMbers, I stosujeToDowisa są prawdziwe, więc każdy typ członka widzi model główny Typy gałęzi jako opcje tworzenia /network. Szablon administratora Kontynuuje GRANT każdy RoleRightType, w tym nowy CREATE_CHILD_ORG Prawy (id 131) na mocy iteracji RoleRightType.values().
· kamo-marketing
Dodaj milisekundy do odliczania, kleszcz co 50ms
· kamo-marketing
Wymień statyczną datę premiery z odliczania na żywo do 2PM PST Apr 20 2026
Ticks co sekundę pokazując Xd XXh XXm; spada z powrotem do statycznej daty Dopóki klient nie nawodnije, pokaże "Teraz", gdy osiągnie cel.
· InitializerService
Domyślny szablon ról administratora rozpoczyna się od wszystkich praw GRANTED
PrzepisMaxedOutMasterModel teraz zapełnia szablon administratora Każdy RoleRightType ustawiony na GRANTED. Pozostałe trzy szablony (członek zespołu, Członek, DEFAULT) nadal materializuje się z zerowymi prawami (NOT_SPECIFIED dla Wszystko), dopasowując zamierzone puste wartości odniesienia dla ról innych niż antymin. Dlaczego GRANTED (nie FORCE_GRANTED): w czasie tworzenia dziecka-org ChildOrgTemplateSeedingService kopiuje wartości szablonów innych niż siła do nowego OrgRoleRight wiersze OrgRoleRight, więc szablon administratora GRANTED daje każde nowe dziecko Org Przygotuj do użycia rolę administratora z pełnymi uprawnieniami, które właściciel może nadal Edycja. FORCE_GRANTED zablokowałby prawa w czasie pracy i ukrywał je przed Redaktor bezpieczeństwa, którego nie chcemy dla bazowego szablonu administracyjnego.
· InitializerService
Zapewnij maksymalny model bezpieczeństwa dla KamoCRM na init
DataLoader teraz tworzy i przypisuje master ChildOrgSecurityModel KamoCRM zaraz po utworzeniu orgi, z każdym ustawieniem maxed Przejście do wartości najbardziej permiernej / mocowej: - allowOwnersOtherOrgs / allowOwnersPrivateOrgs / allowSubChildOrgs - true - identyfikacjaSettingowanie . - teamMemberPayFeesSetting ? FORCE_ENABLE - allowedMemberAgeRanges / allowedTeamMemberAgeRanges - każdy AgeReqType - aplikacjaConfigs - każdy nieużywany serwis serwisowy w FORCE_ENABLED, z CRM zezwala na handel detalowy zawierający każdy CommerceType - Organization.masterModelID ustawiony na nowy model Cztery domyślne szablony ról (Administrator / Członek zespołu / Członek / DEFAULT) są materializowane z zerowymi prawami, więc UI renderuje zakładki Każdy – każde prawo pozostaje NIEECWEIFOWANE w czasie pracy, zamierzone puste Podstawa bazowa. Administratorzy mogą później edytować określone reguły siły za pośrednictwem typów gałęzi Zakładka. Również uderza kamo-shared-libiry do 1.5.0, więc nowy ChildOrgSecurityModelService / AppConfigService / DefaultRoleService i Usuwanie powiązanych typów w czasie kompilacji.
· kamo-internal
Mandager honoruje stan zużony o mocy: zastosowany model siłowy
Akceptuje nowy modelDostępność + zablokowane pola od FeatureController I powłoce je w interfejsie: - Cechy, którego modelAvailability to FORCE_ENABLED, renderuj przełącznik Stan, niepełnosprawny, z objaśniającym podpowiedzią — administratorzy mogą zobaczyć Są włączone, ale nie mogą ich odwrócić. - Przełączanie modeluMasowanie zwarciami z wyraźnym tostem To generyczny błąd z backendu 403. - UWAGA Funkcje NOT_AVAILABLE nigdy nie docierają do klienta (filtrowana po stronie serwera) Tak więc lista UI jest już ogrodzonym widokiem.
· SecurityService
Model stosowany jest źródłem prawdy w czasie odczytu dla dostępności funkcji
Zamyka lukę "stale DB wycieka wyłączną cechę" poprzez zaznaczenie każdej powierzchni Dotykają OrgFeature / ServiceType poprzez zastosowany model zabezpieczeń. - (pierwotny podajnik frontendu OrgContext): zastępuje serializację surowych cech org.getFeatures()). Auto- Zaopatrzenie pętli teraz również pomija aplikacje, które model oznacza NIEBWEABLE, więc Nigdy nie tworzymy wierszy DB dla zablokowanych aplikacji. - FunkcjaController.list: zwraca każdą funkcję z modelAvailability + Zamknięte metadane. NOT_AVAILABLE rzędy są filtrowane, wiersze FORCE_ENABLED Są zgłaszane jako wtyczka-prawdziwa + zablokowana niezależnie od stanu DB. Dostępna lista jest również filtrowana do aplikacji, na które pozwala model. - Nowy AppAvailabilityInterceptor + WebMvcConfig: instaluje a HandlerInterceptor na każdym prefiksie adresu URL (/api/security/pos, /api/security/commerce-markets, /api/security/leads, /api/security/load- przywóz, /api/security/lead-markets, /api/security/lead-vendors, - "" Każde żądanie jest dopasowane do a SerwisType, rozwiązany przeciwko zastosowanemu modelowi dzwoniącemu i odrzucony Z HTTP 403, jeśli aplikacja jest skutecznie wyłączona. To jest ostateczna linia Obrona: nawet ze stanem nieświeżego klienta, zapomnianym strażnikiem kontrolera lub Bezpośrednie połączenie API, zablokowana aplikacja zwraca 403. Efekt netto: zastosowany model bezpieczeństwa wygrywa teraz w czasie odczytu na całym świecie Funkcje lub aplikacje org są odsłonięte - nawigacja, strona główna, ustawienia Wysuwanie, FeaturesManager, punkty końcowe na obsługę. Kiedy administrator się przewraca CRM do NOT_AVAILABLE w modelu, interfejs CRM Zbiega się z frontendu Punkty końcowe CRM rozpoczynają 403'ing - niezależnie od tego, czy DB nadal ma OrgFeature.isActive-true dla CRM.
· kamo-shared-library
Skuteczny dezaminator funkcji do zastosowania-model odczytu
Dodaje bramkę odczytu, która sprawia, że zastosowany model bezpieczeństwa jest ostateczny źródło prawdy dla dostępności funkcji, więc nieświeży stan DB nie może wyciekać Funkcja wyłączona i funkcja z obsługą sił jest zawsze widoczna Nawet jeśli DB nie nadążyło. Nowe metody na AppliedModelEnforcementService: - computeAvailabilitiesMap(org) — jednoprzepustowe rozwiązanie każdego ServiceType's Dostępność dla orgu w jednym odkrywce. Służy jako partia prymitywna Inne nowe metody opierają się na nim. - isAppEffectivelyEnabled(org, serviceType, funkcje) — kanoniczny "jest To aplikacja na" Sprawdź. Podstawowe usługi zawsze, przestarzałe zawsze, FORCE_ENABLED zawsze włączony, NOT_AVAILABLE zawsze wyłączone; OPTIONAL_ defers Węg OrgFeature jest aktywny stan. - Funkcje) — Set-ServiceType> Towarzysz rozmówcy, którzy potrzebują "wszystkich skutecznie włączonych aplikacji" jako zestawu. - computeEfectiveFeatures(org, funkcje) — zwraca świeżą ArrayList Ręki OrgFeature wyświetlane przez bramę: NIEdostępne upuszczone, FORCE_ENABLED zmuszony do aktywnego (nawet na niepełnosprawnych wierszach DB), oraz Forcetonowe aplikacje FORCE_ENABLED bez wiersza DB, ale reprezentowane przez przejściowe wiersze (organizacja-scoped, nigdy nie trwała). Dzwoniące do osób publikujących funkcje orgi do klientów teraz trasę computeEfectiveFeatures zamiast czytać surową kolekcję, więc Frontend domyślnie widzi widok przy zastosowaniu-modelu.
· kamo-internal
Dodaj zakładki ustawień dokujących na takie jak tanie z typami dok, zamówieniami do układania i panelami konfigowymi
Zastępuje ComingSoonTab na /settings/features/docs z pełnym interfejsem ustawień: - Zakładka ogólnego przeglądu + jedna karta na ImageAssocType (Konto, Usługa aplikacji, Zamówienie usługi, Nagrywanie połączeń, Moje dokumenty, Nagrywanie, Poszukiwanie systemu) - Każda zakładka assocType ma 3 pod-tabs: Konfiguracja (folder/docType feature toggles), Typy Doc (pełne CRUD), zamówienia na układanie (CRUD z wizualną szufladą potoku) - Trasy proxy API Next.js dla wszystkich ustawień obrazowania - AssocConfigPanel, DocTypesManager, StackingOrdersManager, StackingOrderDrawer, AssocTypeSettings components
· DocsService
Add ObrazowanieSettingsSKontroller z typem doc, zamówienie układania w stosy i assoc config CRUD
· kamo-shared-library
Dodaj podmiot ImgAssocConfig, repozytorium i sortuj zamówienia do ImgStackingOrderDt
· InitializerService
Dodaj FEATURE_REQUESTS do kategorii wsparcia i wszystkich mapowania funkcji planowych
Bezpłatne: Głos Społeczność, Starter: Głosuj iproś, Biznes: Pierwsze prośby, Przedsiębiorstwo: Custom dev included

Twój wszechświat czeka.
Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.
Bezpłatne na zawsze — nie wymaga karty kredytowej