Changelog
O que há de novo.
Cada melhoria para a plataforma, como ele envia.
· kamo-marketing
Adicionar /pedir links de navegação direta, seção homepage e linha de comparação de características do plano
- Cabeçalho: Pedidos adicionados como ligação directa de topo entre Preços e Empresa - Rodapé: Pedidos adicionados à coluna Produto para visibilidade direta - Página de preços: banner personalizado dev callout entre pacotes e comparação de características - Página de recursos: recurso solicita chamada antes CTA - Página inicial: novo recursoPedidos seção entre preços e FAQ mostrando plano-tier acesso - JumpToBar: Solicita ligação salto adicionado entre Preços e FAQ - DB: FEATURE REQUESTS semeados na categoria Suporte com valores de texto por plano (Free: Community vote, Starter: Vote & request, Business: Pedidos prioritários, Enterprise: Custom dev included) - KamoCRMPricingLoader: atualizado com FEATURE REQUESTS definição de recursos e mapeamentos de recursos de planos
· kamo-internal
App de ida e voltaConfigs + configurações de modelo aplicado de superfície + alternância de org privado
- BranchSetupManager: mapBackendModelo agora hidrata o aplicativo persistenteConfigs retornado pela infra-estrutura (disponibilidade + permitidoCommerceTypes por serviço type) em vez de redefini-los para NOT DISPONÍVEL na carga. Gravar as cargas úteis para ambos os fluxos modelo-criança e master-modelo incluem appConfigs para o disponibilidade por aplicativo e restrições de tipo de comércio CRM ida e volta. Mestre. o editor do modelo reutiliza o mapBackendModel para que ele se comporte de forma idêntica. - useAppliedModel gancho: tipo de resposta expandido agora carrega o aplicado configurações escalares do modelo (allowOwnersViewOtherOrgs, allowOwnersPrivateOrgs, allowSubChildOrgs, faixas etárias, identidadeProviderConfiguração, teamMemberPayFeesSetting), o mapa do aplicativoConfigs, e orgIsPrivate — assim qualquer futuro editor (gerente de recursos, configuração OAuth, mercado de comércio) pode uniformemente sem refetching. - Troque de papel privado: nova rota de procuração (PACTH) e um cartão de visibilidade colocado na aba de ramos, fechado por AllowOwners PrivateOrgs. Quando habilitado, outros proprietários de org não verão isso org em listas. IU otimizada se reconcilia com o próximo modelo aplicado refrescar.
· 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
Forçar cada configuração não-papel em ChildOrgSecurityModel
Adiciona execução de ponta a ponta para as configurações restantes em uma org's aplicada modelo de segurança. Cada configuração que foi anteriormente apenas lida (ou lançada salvar) agora tem um caminho de persistência, um executor de execução, e uma UI gancho para consumi-lo. Camada de dados: - Organization.isPrivate (colum boolean, default false) — o próprio org bandeira de visibilidade, definida através do novo MasterModelController-gated PATCH endpoint. - Disponibilidade de Serviço Tipo enum (OPTIONAL DEFAULT ENABLED / OPTIONAL DEFAULT DISABLED / NOT Disponível / FORCE ENABLED). - ChildOrgSecurityModelAppConfig entity + repo + service — persiste por aplicativo disponibilidade (e CRM's permitidoCommerceTypes) anteriormente descartado em salvar. - Está bem. Regressa à nova entidade. Execução da execução: - AppliedModelEnforcementService consolida todos os cheques utilizados por chamadas: asseverarSubChildOrgPermitido, asseverarAgeRangePermitido, **************************** IdentityProviderRequired, assertCanSetPrivate, filterVisibleOrgsForViewer, asseverarMembro da equipeCanSelfPayFees, é membro da equipePayFeesForced / Bloqueado, assertAppEnablePermitido, assertAppDisablePermitido, getAppDisponível, getDefaultEnabledAppsForChild, assevereCommerceTypePermitido, GetAllowedCommerceTypes. Null-safe: "sem modelo aplicado" permite tudo. - ChildOrgTemplateSeedingService estendido para também sementes OrgFeature linhas de o app- paiConfig por omissão (FORCE ENABLED e OPTIONAL DEFAULT ENABLED) em novas orgs de crianças, assim que novas orgs venha com a superfície padrão certa.
· kamo-internal
Bloquear funções obrigatórias do sistema na interface de atribuição de funções dos membros
- PublicProvider: admita branchTypeID/masterModelID na entrada carga útil da organização para que a aba de tipos de ramificações possa Botão "Edit Master Model" (anteriormente baseado na serialização de Jackson fluindo através da verificação do tipo de adereço). - RolesPermissionsTab: a grade da caixa de seleção de funções agora marca o sistema necessário função(s) tal como verificada(s) e desactivada(s) com base no tipo e no pavilhão do proprietário do membro: * Membros digitados: "Membros" é necessário. * Membros da equipe: "Membros da equipe" é necessário. * Donos de membros da equipe: "Administrador (Acesso completo)" é adicionalmente requerido. Um chip "obrigatório" e uma dica explicativa tornam a restrição visível para o editor. Tentar alternar um papel obrigatório é um sem- operação; a infraestrutura Reconciliação no Controlo de Segurança dos Membros.
· 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
Aplique regras de força de modelo e default backback na resolução de direitos dos membros
Agora sobrepõe-se o pedido 4 modelos de papel padrão do modelo no topo da cascata existente (funções de org → departamento → título do trabalho → membro): - O FORCE GRANTED/FORCE NUKE ganha em todos os níveis de cascata. O modelo é escolhido por tipo de membro: os proprietários de equipe usam ADMINISTRATOR, membros da equipe usam TEAM MEMBER, membros simples usam MEMBRO. - Os valores da FORCE do modelo DEFAULT ganham sobre a cascata quando o modelo do tipo de função não tem nenhuma regra de força para esse direito (por precedência do Q7). - Os valores não obrigatórios DEFAULT (GRANTED/NUKE) actuam como última linha de defesa para: direitos que resolveram para NOT SPECIFIED após a cascata completa. AppliedModelResolverService é injetado como @Autowired(required=false) assim fiação de teste unitário existente que apenas constrói os dois construtores-mandatórios Os repositórios continuam a funcionar, degradando-se para o caminho legado sem regras de força.
· kamo-internal
Adicionar editor de modelos mestre, modelos de funções e gating de regras de força
Surge o novo modelo de segurança tipo ramo na UI: - a aba tipo ramo ganha um botão "Editar modelo mestre" (escondido quando o org tem um branchTypeID atribuído) que abre o editor do modelo no master modo: nenhum campo de nome, nenhum chip tipo ramo, salvar hits /master-model. - Editor de modelos (ambos add-child-model e edit-master-model) ganha um novo "Default Security Roles" seção após "Permitido Apps", com abas para Administrador / membro da equipe / membro / DEFAULT e configurações de 5 valores (concedido, concedido, não especificado, force nuke, NUKE). - Novo usoAppliedModel() anzol fetches /api/security/applied-model uma vez e expõe isForced( direitoName, roleType) para consumir editores. - Funções de segurança, departamentos, títulos de emprego, e papéis por membro-permissões Páginas ocultam os direitos bloqueados pelos modelos aplicáveis: * papéis de segurança: funções do sistema usam seu modelo de correspondência + DEFAULT; funções personalizadas usar apenas DEFAULT (Q11 resposta A). * departamentos + títulos de trabalho: DEFAULT apenas (não-papel específico). * página de membro: modelo de membro (TEAM MEMBER vs MEMBRO) + DEFAULT (Q8 resposta C, ordem de avaliação tipo-primeiro). Novas rotas proxy: /api/security/master-model (GET/PUT), /api/segurança/modelo aplicado (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
Adicionar modelo mestre, modelos de funções padrão e resolução de modelo aplicado
Apresenta a camada de dados para o novo fluxo do modelo de segurança tipo ramo: - Organização ganha branch nullableTypeID e masterModelID colunas. - Novo RoleRightTemplateSetting Tipo enum com 5 valores (FORCE GRANTED, CONCESSÃO, NÃO ESPECIFICADO, FORCE NUKE, NUKE) para configurações de camada de modelo. - Novo enum de tipo padrão (ADMINISTRATOR, CHAM MEMBER, MEMBRO, DEFAULT) para os 4 modelos de funções anexados a cada ChildOrgSecurityModel. - Novas entidades. * ************* mais os seus acordos, serviços e DTOs. - AppliedModelResolverService resolve o modelo que governa uma determinada org (branchType-herdado ou mestre) e expõe buscas por regras de força. - ChildOrgTemplateSeedingService seeds new child orgs' 3 papéis do sistema com Valores CONCEDIDOS/NUKE dos modelos do modelo aplicado; valores de força permanecem no modelo e são aplicados em tempo de execução. OrgRoleRight do usuário final continua usando o tipo de definição de função de 3-valor – os valores de força são estritamente um conceito de camada de modelo.
· kamo-internal
Adicionar campo de entrada de chip do tipo ramificação ao editor de modelo de segurança
- BranchTypeChipField com alternância de pontos coloridos, edite-on-click label, e X delete - BranchTypeEditDialog para edição de nome/descrição - Autocomplete dropdown pulls from GET /api/security/branch-types, exclui tipos de modelos atuais, mostra modelo de fonte para tipos cross-model - HandleSaveModel envia branchTypes e excluídosBranchTypeIds na carga útil PUT/POST - tabela de lista recebe Branch Tipos coluna com chips coloridos ponto - loadModels maps branchTypes from backend response
· kamo-login
Remover MANAGEM UTILIZADORS diretamente do Tipo de Direitos de Papel
· kamo-register
Remover MANAGEM UTILIZADORS diretamente do Tipo de Direitos de Papel
· kamo-internal
Remover MANAGEM USERS de todas as referências do frontend
· kamo-shared-library
Remover MANAGEM UTILIZADORES à direita (id=19) do Tipo de Função
· kamo-internal
Adicionar rota API de segurança de tipos de ramificações
· SecurityService
Wire branch types into security model CRUD endpoints
· kamo-shared-library
Expandir ChildOrgSecurityModelDTO com campos completos e branchTypes
· kamo-shared-library
Adicionar orgBranchTypeService
· kamo-shared-library
Adicionar orgBranchTypeRepository
· kamo-shared-library
Adicionar orgBranchTypeDTO
· kamo-shared-library
Adicionar entidade OrgBranchType
· kamo-internal
Atualizar BranchSetupManager subtítulo para a legenda de tipo de ramo dinâmico de referência
· kamo-internal
Renomear a aba Configuração de Ramo para dinâmica {branchLabel} Tipos e atualizar URL para tipos de ramificações
· kamo-login
Reiniciar o Capcha *** após cada tentativa de autenticação falhada
Os usuários devem verificar novamente que são humanos após cada senha incorreta. Chama widget.reset() e limpa CapchaVerified/payload state on Falhas de credencial e erros de rede.
· 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
Adicionar portas de permissão para campos de nível de usuário e seção de mudança de senha no MyAccountTab
· kamo-internal
Adicionar portão de acesso e guia MANAGEM MEMBER SECURITY guarda para a página de configurações de membro
· kamo-internal
Adicionar mudança-password Next.js API proxy route

Seu universo está esperando.
Comece gratuitamente em minutos.Adicione produtos sempre que estiver pronto — sem migração, sem novos logins.
Gratuito para sempre — não é necessário cartão de crédito