Changelog
Ce qui est nouveau.
Chaque amélioration apportée à la plateforme, à mesure qu'elle est livrée.
· VOIPService
Refactoriel multi-instances et FreePX complet et Flowroute SMS
Changement de modèle de base: un org et de nombreuses instances VoipProvider (était: une par org). Chaque appel API fournisseur est maintenant analysé par cas. Interface PhoneProvider: - Nouvelles méthodes d'extension/utilisateur/dispositif CRUD et de messagerie vocale audio/transcription. - Nouveaux drapeaux de capacité (extensionGestion, gestion de l'utilisateur, gestion de l'appareil, e-mail vocalTranscription). Jetez les défauts de preuve (HTTP 501) de sorte que les fournisseurs de stub ne casse pas. Reprise de contrôle frontale de dissimuler/désactiver des actions par fournisseur. - ProposerException (HTTP 502) pour les défaillances de dépendance à l'extérieur. PhoneProviderFactory: - getInstance (UUID) / - remplacer l'héritage getProvider(Long orgId); getPrimaryForOrg(Long) conservé pour les anciens sites d'appel (CallController, CapabilitiesCurtomer, SipController, webhook inbound). - Jetons RingCentral OAuth maintenant par (orgId, provider, instanceId) donc un org peut authentifier plusieurs déploiements RingCentral indépendants. - FreePBX construction lit config-json et baseUrl, clientId, clientSecret, ignoreSslErrors et instancie un FreePBXGraphQLClient dédié. RingCentral (RingCentralProvider): - Constructor prend instanceId pour loger le contexte. - Nouvelles méthodes: listeExtensions / createExtension / updateExtension / deleteExtension; listUsers / createUser / updateUser / deleteUser (modèles de RC) listDevices / createDevice / updateDevice / updateDevice / UpdateDevice / supprimer Dispositif; fetchrVoicemailAudio (contenu de pièces jointes) et fetchVoicemailTranscription. FreePBX (FreePXProvider) - l'implémentation complète remplace l'espace réservé: - Client-crétricials de mise à la commande OAuth2 enroulement sur jeton par l'intermédiaire de FreePBXTokenCache (t. auto-rafraîchissement sur 401, par instance). - FreePBXGraphQLClient: GraphQL et REST transportés avec option savane-série-verre-SSL pour les auto-signés PBX surprem. - Extensions, utilisateurs de gestionnaires d'utilisateurs, appareils du gestionnaire de points d'extrémité, messagerie vocale list/mark-read/delete - flux audio, historique des appels CDR, justificatifs d'identification SIP dérivé du secret pjsip de l'extension, la santé via fetchAsteriskInfo. - SMS explicitement non pris en charge (capacité sms-faux) et FreePBX ne gère pas SMS du transporteur. Flowroute SMS (FlowrouteTextProvider): - Messages v2.1 API avec HTTP Basic (accessKe, secretKey). - Une sonde de santé frappe GET/numéros?limite 1. - Enregistré à BulkTextProviderFactory via la nouvelle valeur FLOWROUTE enum. Contrôleurs: - VoipInstanceContrôleur (rebaptisé auprès du fournisseurConcachateur) et CRUD complet à /api/voip/specs avec test/synchronnement per-instance. Secrets caviardés en GET réponses (« '-'); fusion-mise à jour permet à l'UI aller-retour les champs caviardés sans clobbing d'identification stocké. - BulkTextInstanceController (rebaptisé en BulkTextConcuter) et rétroviseur CRUD à /api/bulktext/instances avec essai / essai-send / send. - OAuthController reécrit par exemple-argilié OAuth: début, rappel, statut, déconnecter tous prendre instanceId. - SmsController résout l'instance par rapport au membre.instanceId et org primaire, attaches à des conversations à plus forte. - CallController/CapabilitiesCuler/SipContrôleur Retour à l'ordonnance l'instance active principale pour les anciens critères d'évaluation d'une seule instance. Services : - InstanceSyncService: synchronisation des caches à traversée et extensions/utilisateurs/dispositifs/ messageries vocales copiées du fournisseur vers les tableaux locaux, lignes manquantes et soft-marked NON CONTENANT LE CONSCIENCE. Chaque sous-étape enveloppée de sorte qu'une capacité non soutenue ne fait pas faillite la synchronisation entière (ex. FreePBX no-SMS - has-extensions). - VoipMessageService : tous les chemins de conversation/message propagent instance. Essais: essais préexistants VoipProviderConfig enlevés (couvrant la renommés types; la réécriture est hors de portée par spécification de conception 10 et pas de TDD les infrastructures sont ajoutées dans ce refactor). Construit en vert avec la librairie kmo-shared mise à jour.
· InitializerService
Migration du téléphone à plusieurs instances/fournisseur de SMS
S'exécute après Hibernate ddl-auto:update crée de nouvelles tables (VOIP-PROVIDER-INSTANCE, APPLICATION, ÉLÉTÉTHALISATION, PHONE-EXTENSION, PHONE-END-USER, PHONE-DEVICE, PHONE-VOICEMAIL, SYSTEME-CONFIGURATION) du rebaptisé/nouvelles entités en kamo-shared-library commit 232d731. Mouette ce que Hibernate ne peut pas: - Copier les lignes de l'héritage voip-provider-config / bulk-text-provider-config dans nouvelles tables d'instances, synthétisant le nom d'instance à partir du type de fournisseur. - N'abandonnez PAS les rangées (ordinale 0) - l'absence est maintenant l'état "pas de fournisseur". - Laisser tomber les tables de la configuration de l'héritage aujourd'hui vide. - instance de remplissage-id sur les conversations membres-voip-config, voip-conversations, et kamotokens.org-oauth-token en utilisant l'instance active la plus ancienne de chaque org. - Reconstruire l'indice unique de l'orgoooth-token à partir de (org-id, fournisseur) (org-id, provider, instance-id) donc plusieurs instances de RingCentral par oug travail. - Laisser tomber les index uniques des orphelines à partir de tables voip-conversations et d'instances de fournisseur. - Semener la ligne monotone de configuration système (intervalle de synchronisation de la voix 10min par défaut, l'opérateur de plate-forme est config via la nouvelle configuration de la plate-forme Onglet VOIP et SMS. Toutes les déclarations idempotentes; la reprise sur la base de données déjà migrée est sûre. Commande 20 euros après SchemaCleanupRunner (1), OrganizationTypeRemovalRunner (2), KamoCRMAgeReqUpdateRunner (10).
· kamo-shared-library
Fondation de schéma de téléphone/fournisseur de SMS à plusieurs instances
- Renommer VoipProviderConfig et VoipProviderInstance; supprimer UNIQUE(org-id), ajouter instance-name, config-json, last-sync-at, last-sync-error. - Renommer BulkTextProviderConfig et BulkTextProviderInstance; même traitement multi-instances. Nouvelles entités : PhoneExtension, PhoneEndUser, PhoneDevice, PhoneVoicemail, SystemConfiguration. - Ajoutez l'analyse à MemberVoipConfig, VoipConversation, OrgOAuthToken ( instances multiples RingCentral par org). - Nouveaux enums : PhoneExtensionStatus, PhoneEndUserStatus, PhoneDeviceType, PhoneDeviceRegistrationStatus. - Déprécier NOTIGURED en z (conservé à l'ordinal 0 pour préserver les rangs existants sous EnumType.ORDINAL). - Ajouter FLOWROUTE à BulkTextProviderType pour le nouveau fournisseur de SMS Flowroute. - DTO d'abstraction des fournisseurs (ExtensionDto, PhoneUserDto, DeviceDto, VoicemailEntryDto, InstanceHealthDto, Create/Update requests). Première phase du refactoriel multi-instance/sagementiel (en kamo-login repo). La migration de KamoInitializer et les réfactorisats de service à suivre.
· KlusterServices
Déployer FreePBX 17 et Jigasi SIP sur k1m1 et k2m1
FreePBX (ededofit/freepbx:17-latest) s'exécute avec hostNetwork donc SIP/RTP préserve les IP réels des clients, épinglés un-per-noeud via nodeSelector. PIS sur 5060 UDP/TCP (5061 TLS), gamme RTP 18000-18999 choisie pour éviter Janus (20000-20999), Coturn (52000-65535), et WireGuard (51820-51821). Meet Jigasi ajouté en tant que pont interne ClusterIP SIP pour que FreePBX puisse Appels d'offres pour les conférences de Meet; Prosody fournit maintenant un utilisateur de jigasi à partir de JIGASI-XMPP-PASSWORD. Admin UI accessible via Traefik à l'adresse suivante: pbx.k1.kluster.kamocrm.com / pbx.k2.kluster.kamocrm.com avec certs Ensemencé par des STATIC-DOMAINS auto-certs.
· kamo-internal
Vue de l'admin Platform, pagination, recherche en direct, filtres, logos d'orge
Les administrateurs de la plate-forme (propriétaire de l'ordonnance de haut niveau) voient désormais tous les organismes du système via le nouveau point d'extrémité /api/security/org/all-networks au lieu de leurs propres membres. Le titre de l'en-tête et la mise à jour du sous-titre pour refléter le contexte de l'administration. Autres améliorations: - Pagination : côté client, par défaut 25/page, configurable (10/25/50/100) - Recherche en direct: filtres par titre, titre court ou domaine en temps réel - Puces filtrantes: "Tous", "Orgues I Own", "DNS pas encore configuré" - Nombre de résultats affichés à côté du sélecteur de page - Boutons de numéro de page avec effondrée d'ellipse pour le nombre de pages importantes - Le composant OrgLogo consolide le rendu du logo (le logo court via getOrgLogoUrl) pour la carte d'or en cours et toutes les cartes d'orgage de la liste - Bouton ENTER correctement gardé par org.memberId (enregistrement partagé utilisateur-membre) - ENTRE LE MOMBRE DE SYSTEME disponible pour tous les types de getirAssystemMembre
· SecurityService
Ajouter GET /api/security/org/all-networks pour les administrateurs de plates-formes
Les propriétaires d'organisations de haut niveau peuvent désormais aller chercher toutes les organisations du système avec l'information d'appartenance relative à l'appelant. Orgs où l'appelant a un membre record get isOwner/memberId peuplé; les autres obtiennent memberId: null, isOwner: false. Le point d'extrémité fait valoir que l'appelant est à la fois dans l'ordre supérieur et qu'il est propriétaire.
· kamo-internal
Sous-tabs dans l'éditeur de modèles de sécurité et le nettoyage
- L'éditeur du modèle de sécurité est maintenant scindé en quatre sous-bogoustes: Général (Basic Info, Visibility, Who Can Create, Paramètres de plate-forme, configuration de domaine, marchés du commerce), censerie (alcool/ tabac/armes à feu - membres - tranches d'âge de membres d'équipe), Apps autorisés, et Rôles de sécurité par défaut. - Nouveau et laisse un admin éditer un modèle letotSubdomains drapeau et alias parents à côté du reste de ce les réglages du modèle. Auparavant, cela gardait à l'intérieur du sous-domaine à l'échelle de l'ordre général Branches pop-up. - Les branches de sous-domaine sont simplifiées aux bits de niveau d'orge uniquement Les références GoDaddy et maître permettent de basculer. Les pseudonymes par modèle sont sortis à la fois le dialogue et sa surface de support; SecurityRoleManager déborde Des accessoires désormais inutilisés. - Supprime chaque référence à l'équipeMembrePayFeesSetting / PayFeesSetting / TriStateFeeOption - Les "Employee Self-Pay Kamo Fees" sont sélectionnés sur le L'éditeur de modèle et sa puce dans la table des modèles sont partis, avec le type alias dans l'utilisationAppliedModel. - /settings/platform/events et /settings/platform/plans pages sont supprimé (ils étaient des espaces réservés de la surface de facturation dépréciée). La page de destination, la liste des sous-thèmes de SettingsStatusWindow, et la route/icône cartographie toutes les entrées correspondantes. - Gérer le sous-tabou de groupe et maintenant affiche le titre du groupe par défaut en tant que champ de lecture désactivé (a été les administrateurs peuvent donc voir le Le nom du groupe tout en comprenant qu'il ne peut pas être changé.
· kamo-internal
Bouton Alias de visibilité UI et sous-domaines Branches sur la page des types de succursales
Sous-domaineBranchesDialog: - Éditeur Alias a remplacé la liste de puces par une liste de lignes de type table indiquant Les cases à cocher les membres et les membres de l'équipe par alias et contrôle des administrateurs qui Les types de créateurs voient chaque alias parent dans /network/créate - surMise à jourModelSubdomainConfig signature mise à jour pour passer des objets d'alias complets (alias, visibleToMembers, visibleToTeamMembers) au lieu de cordes simples SecurityRoleManager: - armons de carte de l'état de sécurité et de la sécurité totale Drapeaux - persisterModelSubdomainConfig passe des objets d'alias complets au backend BranchSetupManager - Ajout d'un bouton de branchement de sous-domaine (page de sécurité-roi) avec Même sous-domaineBranchesDialog, status-fent sur le support et rechargement du modèle lorsque le dialogue s'ouvre
· SecurityService
Filtrage de la visibilité d'Alica et vérification automatique de la propriété du sous-domaine
OrganisationContrôleur: - Création d'une organisation de ressources en cas de surbrilosité désormais automarque isDnsVerified-true sur l'OrgDomain créé - aucun enregistrement TXT n'est nécessaire depuis Nous avons fourni le DNS à GoDaddy en leur nom - Le chemin de type PERSONNALISEL entre les parentsAlias applique désormais la visibilité de type créateur de la même brèche (miroirs/filtres acréatables pour que le backend ne puisse pas être contourné) BranchTypeContrôleur / acréatable: - la liste parentAliases est maintenant filtrée par le créateur de l'appelantType: Les MEMBRES ne voient que visibleLes mots de « vrais députés », TEAM-MEMBERS voir uniquement visibleToTeamMembres - alias vrais, PROPRIÉTAIRES voir tous - Chaque alias DTO inclut désormais des drapeaux visiblesÀ des membres et des membres visibles SécuritéModèlecontrôleur: - processus SubdomainBranchConfig reads maintenant à partir d'autres objets cartographiques et d'appels remplacerAllFull pour les persister
· kamo-shared-library
Ajouter des drapeaux de visibilité de type créateur paralias
Ajouter visibleLes membres/ visiblesToTeamMembres Les colonnes booléennes à ChildOrgSecurityModelAlias afin que les administrateurs puissent restreindre les pseudonymes de la personne mère apparaissent aux membres contre membres de l'équipe lors de la création d'enfants. Entité : deux colonnes vraies par défaut avec BOOL DEFAULT VRAI - Sous-domainAliasDTO : exposer les deux drapeaux dans l'Entity - Nouveau record d'AlicaEntry - remplacerAllFulll surcharge qui persiste la visibilité; remplacer les délégués à elle
· kamo-internal
Paramètres de dialogue, chemin d'assistant web-alias et panneau de provisionnement DNS
Ajoute l'interface utilisateur de branches de sous-domaine sur trois surfaces: - Nouveau bouton "Sous-domaines Branches" ouvre un dialogue pour l'activation de niveau de l'orge et GoDaddy creds, avec un Rédacteur de modèle par sécurité pour les sous-domaines d'autorisationRootSubdomains et alias parents (reuses) les assistants du magicien isalidAlias/toSafeAlias) - /réseau/création : BasicsStep maintenant branches entre un domaine d'accueil un chemin de ramon et un chemin de gomme de Kamo (aré sur le drapeau d'activation de l'orge parent, Statut de GoDaddy, et alias du type de branche sélectionné). Parent Alias les listes déroulantes ROOT (lorsqu'elles sont autorisées) plus les pseudonymes par modèle; aide en direct Mises à jour de prévisualisation au fur et à mesure que l'utilisateur change l'un ou l'autre champ - /setup/dns: nouveau DnsProvisioningPorns le journal de provisionnement de l'orge et surface par record de GoDaddy avec une action en cas de rétrécissement Soutenus par les routes par procuration de la BFF de Next.js
· SecurityService
Configment de niveau Org, client GoDaddy et web-alias org créent un chemin
Fillage les nouvelles Branches de sous-domaines de bout en bout sur le backend: - Sous-domaineBranchesContrôleur pour l'activation de l'ordre - GoDaddy creds (vérifiés en direct) - GoDaddyDnsClient effectue des upserts CNAME idempotents et des contrôles d'accréditation DnsProvisioning Service async-quetonne le sous-ensemble standard KnownAliases et écrit par record à OrgDnsProvisionLog - SecurityModelCuttoteur porte des téléphones de contrôle autorisant les sous-domaines et les alias sur créer/mettre à jour - Accepte la voie de la construction web (useWebAlias et parentAliasType et parentAliasId et webAlias), calcule le le FQDN résultant sous la zone racine du parent, et démarre le provisionnement DNS après la création de l'ordonnance transactionnelle - Le critère d'évaluation «Greffe»/créateur de type BranchTypeController expose les alias par modèle et le statut de sous-domaine-erg parent-ensemble de sorte que l'assistant peut assurer l'interface utilisateur
· kamo-shared-library
Ajouter des entités, des chiffrements et des abricots de logs d'alias/DNS
Ajoute des creds GoDaddy par or (AES-GCM crypté), un drapeau de l'autoRootSubdomains et la collecte d'alias enfants-org sur le modèle de sécurité, un approvisionnement en DNS log de vérification et aide SecretCipher partagé utilisé par SecurityService pour effectuer un aller-retour des clés API stockées sans jamais les renvoyer au frontend.
· kamo-internal
Décharges de préfixe/suffix, porte de domaine de boîte aux lettres, statut explicite
- Le préfixe et le suffixe du nom sont maintenant des déroulants provenant de la NamePrefixType / NameSuffixType catalogs délivrés par l'orgg-config point d'extrémité. Affiche l'abréviation et le nom complet par option. - "Carte de courrier électronique de l'organisation de distribution" est désormais désactivée, à moins que le domaine de l'organisation correspond à l'une des cases mails vérifiées de l'organisation domaines (tiré de GET/api/email/domains). Messagerie en ligne claire explique s'il est désactivé en raison de l'absence d'e-mail, pas de vérification des domaines configurés, ou une inadéquation de domaine - et nomme le réel des domaines configurés de sorte que l'administrateur sait quoi utiliser. - Le statut d'équipe n'est plus défaillant par défaut à PROSPECT; les administrateurs doivent Choisir un état de cycle de vie explicitement ou soumettre est bloqué. Résumé Le panneau indique "indéterminé" jusqu'à ce qu'un statut soit choisi.
· SecurityService
État de l'équipe explicite et catalogues de préfixe/suffixe
- GET - retourne maintenant nomPrefixes et nameSuffixes, provenant de NamePrefixType et NameSuffixType de sorte Ajouter Member / Add Member Member Formes ne sont pas tenus de les coder en dur. - POST/créate-équipe-membre rejette maintenant une demande omet État d'adhésion à l'équipe (400). La précédente solution de repli de PROSPECT silencieuse est n'est plus que l'appelant doit choisir un état de cycle de vie explicitement de l'équipe les membres ne sont jamais mal étiquetés par défaut.
· kamo-internal
Pleine largeur, trois volets Ajouter la présentation du formulaire de membre
Retravaille le formulaire de création pour utiliser l'ensemble de la zone de contenu au lieu d'un 1100px colonne centrée sur l'échelle. - aménagement réactif à 3 colonnes: section gauche autocollante nav (md), pleine largeur formulaire (toujours), panneau récapitulatif en direct à droite (xl). - Les rangées de champ sont maintenant à l'échelle de la largeur disponible: le tronçon de nom est à 5-up à la md, Les lignes de contact et de rôle vont jusqu'à 4-up aux points d'arrêt xl. - La barre d'action de fond collante s'étend sur toute la largeur avec un indice d'état et un CTA primaire de gradient. - La section nav utilise l'espion de défilement pour mettre en évidence la section dans laquelle se trouve l'utilisateur et prend en charge le click-to-scroll. - Style de carte poli - bordures douces, ascenseur à voltéro léger, pente icônes de section en-tête. - La nouvelle carte récapitulative à droite reflète les données du formulaire en direct (avatar) initiales, nom, nom d'utilisateur, e-mail, rôle, puce d'état) et affichent un prêt à créer un indicateur une fois que la validation passe.
· kamo-register
Fusionner l'alias/courrier/nom/téléphone en une seule étape "Mon profil"
Combiner le "My E-Mail et Alias" précédemment séparé, "My Mon nom", et "Nombre de téléphone" en une étape "Mon profil" pour les personnes qui s'enregistrent 13 ans et plus, avec alias - e-mail - nom légal requis et numéro de téléphone facultatif (vérifié par SMS lorsqu'il est entré). Les personnes inscrites aux moins de 13 ans voient maintenant un Étape unique rebaptisée "My User Alias" - pas de courrier électronique, nom légal ou téléphone. - RegisterFlow: liste d'étapes simplifiée, poignée unifiéeSidation prochaine, de nouveaux cas de renderStepContent. L'étape de profil est interne dérisoire, les trois sections s'intègrent dans la fenêtre d'affichage. - L'état du registre acquiert une valeur "s'inscrire" pour les achèvements des moins de 13 ans où il n'y a pas d'e-mail pour vérifier - ils sont acheminés directement vers le la page de connexion avec l'enregistrement-1 au lieu de la page de vérification par courrier électronique.
· SecurityService
Faire en sorte que le nom légal de l'e-mail et du nom légal facultatifs pour les moins de 13 ans d'inscription
Le critère d'évaluation /api/sécurité/registre a précédemment rejeté toute demande manquante d'e-mail, de prénom ou de nom. Cela a fait le chemin sous--13 (URSIV) ou ALL-AGES avec un déclarant de moins de 13 ans) impossibles ces comptes n'ont légitimement qu'un pseudo-monnaie - une phrase de graine. La validation nécessite désormais un alias - mot de passe sur chaque chemin, et traite e-mail - prénom - nom de famille en tant que triple tout ou rien: fournir L'un d'entre eux exige les trois. Le message électronique de vérification et le champ d'e-mail de réponse surveille désormais si un e-mail était réellement à condition que, et le statut de la réponse soit "REGISTRE" (vs l'existant "EMAIL-VERIFICATION-REQUIRED") lorsqu'il n'y a pas d'e-mail à vérifier.
· kamo-shared-library
Ajouter un . . . . . . . .
· kamo-internal
Page de configuration de l'utilisateur du système et réseau ENTRE ENTRE ENTRE LE SYSTEME MÉMINAIRE
Ajoute l'administration et la configuration de la plate-forme, un propriétaire d'orge-saérieur uniquement Une page qui accorde ou révoquer l'autorisation d'usurper la plateforme Utilisateur du système par département, titre professionnel ou membre de l'équipe. Enregistré dans les trois emplacements de nav (liste des tuiles de page d'établissement, ParamètresStatusWindow routes - sous-thèmes, et page elle-même). Mises à jour/réseau pour utiliser le nouveau critère d'évaluation /api/security/enter-as pour le le bouton ENTER existant, de sorte que le domaine de destination reçoit une session construit à partir du membre de l'ordonnance cible (fixation du bogue où la source membre d'org/orgID a fui dans la nouvelle session). Ajout d'une ENTER AS Bouton MEMBRE SYSTEME à côté d'ENTER qui ne rend que après confirme que l'appelant est éligible.
· SecurityService
Remplissage, entrée en prise, gardes de mutation, configuration API
Auto-réchauffage: SystemUserBackfillService s'exécute sur tous les Botte de SecurityService (de DataLoader) pour ajouter la colonne is-système-utilisateur et la table d'accès system-user-access en cas d'absence, assurez-vous que le système monotone L'enregistrement de l'utilisateur existe et la création d'un membre de l'équipe d'administrateur dans chaque groupe d'accueil. Un og non supérieur à celui auquel il n'appartient pas déjà. Course également à créer l'heure d'organisation donc les nouveaux orgs obtiennent un membre de l'utilisateur du système immédiatement plutôt qu'en attendant le prochain redémarrage. Flocage d'entrée en gigot croisé: remplace l'ancien /api/généré-t-k de transfert (qui a divulgué la session source-org de l'appelant au domaine de destination) avec /api/sécurité/entrez-sous-(s) Le nouveau critère d'évaluation est un nouveau et un nouveau le membre effectif de l'organisme cible, donc memberID/orgID/droits correspond toujours l'orgueil en cours d'entrée. Ajoute un champ SUDO-MEMBER-ID à la session JSON de sorte que l'usurpation d'identité de l'utilisateur du système porte le membre de l'opérateur humainId pour l'attribution de l'audit. Gardes : SystemUserGuard refuse toute mutation induite par l'API vers le Système Enregistrement de l'utilisateur ou l'une quelconque de ses compositions (câblé en MemberController, MemberSecurityController, et qui se cachent Utilisateur du système à partir des GetMembersAndAscripteurs, getTeamMembersAndContractors, et getMembersByDepartment, les points d'extrémité de ce type afin que les locataires ne le voient jamais dans les listes. Surface de configuration: SystemUserConfigurer le contrôleur expose le CRUD sur la subvention Tableau réservé aux propriétaires d'orges de haut niveau, et SystemUserCapabilityCtroller retourne un booléen utilisé sur la page /-réseau pour décider s'il convient de rendre le ENTRÉE ENTRE LE MOMBRE SYSTEME.
· kamo-shared-library
Ajouter Système Drapeau de l'utilisateur et entité d'accès
Introduit le modèle d'utilisateur du système à l'échelle de la plate-forme: un drapeau User.isSystemUser (indice partiel unique impose un singleton), plus une table SystemUserAccess qui enregistre les départements de haut niveau, les titres des emplois ou les membres de l'équipe peut se faire passer l'utilisateur du système pour entrer dans des enfants. Les lignes d'accès sont plate-forme-internes (et non entrées de type "Ry-droit") de sorte qu'elles restent en dehors de la la surface des droits de fer.
· kamo-register
Ajouter les mesures de vérification par téléphone et de sécurité
Insérer deux nouvelles étapes entre le mot de passe et le recouvrement du compte pour 13 Inscriptions: une étape de numéro de téléphone (facultatif, skippable, avec code SMS) vérification) et une étape de questions de sécurité (requis, 3 distinctes questions avec réponses). Les personnes âgées de moins de 13 ans continuent de sauter les deux et s'appuyer sur leur expression de germination pour se reconstituer. - FormPhoneNumber: inactif ---------------------------------------- Gélules SMS de coupage SMS par étape, change-numéro et saut d'itinéraires. - Form SecurityQuestions: 3 dérogrammes et réponses, caractère unique appliqué, le catalogue extrait du nouveau point de terminaison d'appel public. - RegisterFlow: nouveau formulaireChaux de données, étapes conditionnelles, poignéeSuivant validation, téléphone et sécuritéQuestions câblées dans l'organe de soumission. - /api/sûreté de sécurité maintenant en avant X-Forwarded-Host de sorte que le backend can résoudre l'og pour la sélection du fournisseur de SMS.
· SecurityService
Rassembler les questions de téléphone et de sécurité pendant l'inscription
Déplacer le numéro de téléphone et la collecte de questions de sécurité dans le libre-service flux d'enregistrement (lorsqu'ils étaient initialement prévus) plutôt que nécessitant une page de mise en place après l'inscription. - Nouveau RegistrationPhoneService: génère/veille des codes SMS à 6 chiffres via BulkTextSmsClient, TTL de 10 minutes, limite de débit de 5 heures par nombre. - RegistrationService accepte désormais un registre RegistrationParams avec facultatif vérifiéPhone et liste de questions de sécurité à 3 prises; questions de sécurité sont brisées par bcrypt avec la règle de normalisation de la réponse existante. - /api/sécurité/registre accepte - et revendique le téléphone vérifié par rapport au code avant de persister l'utilisateur. - Nouveaux critères d'évaluation publics POST /registrer/téléphone/lancer (capcha-gated), POST /registre/écoute/vérifier, et ENSEMBLE
· kamo-shared-library
Ajouter RegistrationPhoneCode entité et référentiel
Le nouveau tableau (enregistration-phone-codes) stocke des codes de vérification des SMS à un coup de feu émis lors de l'enregistrement en libre-service, avant l'existence d'une entité utilisatrice. S'est séparé de AccountVerificationCode pour éviter de transporter un utilisateur NULLId sur cette table.
· kamo-internal
Ajouter une page membre/Ajouter des membres de l'équipe
/compte: remplacer un seul bouton ambigu par des boutons à tabulation Ajouter «Membre» sur l'onglet Membres, ajouter «Membre de l'équipe» dans l'onglet Membres de l'équipe. Chaque bouton s'achemine vers une page de création dédiée au lieu de l'ancienne rupture jusqu'au détail du membre. Nouveaux /réglages/membre/nouveaux et/points/équipes/nouvelles pages, les deux soutenu par un membre partagéCreateForm avec un propant "variant". - La forme est une présentation unique, orientée vers la section (nom, identité, contact, la boîte aux lettres, le rôle/localité réservé aux membres d'équipe, l'examen). Live-utilisateur-lookup on e-mail et nom d'utilisateur avertissent qu'un utilisateur existe déjà ou est déjà lié en tant que membre dans cet org. - Honore l'organisation AgeReqType : si l'exigence permet aux utilisateurs de moins de 13 ans, les champs de courrier électronique personnel et organisationnel sont cachés et le nom d'utilisateur devient l'identifiant primaire. - La case à cocher optionnelle "Convision organisation e-mail" crée la case à cocher une boîte aux lettres par l'intermédiaire d'EmailService et l'assigne comme boîte aux lettres principale du membre. - L'onglet profilé sur /settings/member/[id) inclut désormais l'emplacement du travail, l'équipe Statut de membre et titre officiel d'emploi pour les dossiers du membre de l'équipe, câblés au critère d'évaluation PUT/api/station/silenhére/-id- existant.
· SecurityService
Ajouter membre / Ajouter un flux de création de membres de l'équipe
- Nouveau membreCréteur expose : - GET - âge-req, fuseau horaire, départements, titres d'emploi Vérification de l'existence par courrier électronique ou par nom d'utilisateur POST /api/sécurité/membres/créer et créer Membre dans l'adresse - Création d'équipes départemente / titre d'emploi / lieu de travail / statut d'adhésion / niveau de sécurité - Remplir un utilisateur existant lorsque le courrier électronique ou le nom d'utilisateur correspond déjà; sinon crée un utilisateur net-nouveau et envoie le modèle EMAIL-VERIFICATION. BIENVENUE Un modèle est toujours envoyé lors de la création. - Pour les organisations dont AgeReqType permet aux utilisateurs de moins de 13 ans, la collecte d'e-mails est sarvé et le nom d'utilisateur devient l'identifiant primaire. - Étend l'EGET/les membres/zid) à l'emplacement de retour et l'équipe est l'organisateur d'un groupe d'équipes et le PUT pour maintenir le lieu, État d'avancement de l'équipe, et jobTitleOfficial lorsque le dossier est membre de l'équipe. - Attribution des rôles par défaut et matérialisation des droits délégués à MemberService Par conséquent, chaque nouveau membre atterrit avec ses droits effectifs déjà appliqués. - Fix EntitlementService: boolean getter a été orthographié getIsOrganizationOwner (Lombok génère est OrganisationOwner pour les champs booléens primitifs).
· kamo-shared-library
Ajouter AgeReqType.allowsUnder13() aide
Utilisé par le flux de membres Ajouter un membre/un membre de l'équipe pour sauter la collecte d'e-mails pour les orges dont l'âge prescrit permet aux utilisateurs de moins de 13 ans (ALL-AGES, KIDS-ONLY, ALL-COPPA-GRADS).
· kamo-internal
Reconstruire les plans et la facturation autour des groupes de facturation
- Page des membres Plans et facturation est maintenant alignée à droite avec une lueur pulsée et une icône StarRate sur la barre des onglets. Visible lorsque le membre vu est l'utilisateur connecté OU l'utilisateur signé possède l'org. Table du contenu en quatre sous-ongles: abonnements, factures, informations sur les paiements, groupe de gestion. Décrochage du sélecteur de groupe de facturation et bouton d'icône "Add Billing Group" en direct à droite de la barre de sous-onglet; la sélection de groupe entraîne chaque panneau. - Le panneau d'abonnements affiche une carte par marché actif (FREE-DEFAULT) KamoCRM toujours présent), avec changement-plan / annulation / réactivation et a Grille d'affectation de licence par siège. Autodésactivation prioritaire réduction du côté du serveur sur le siège. - Le panneau d'information de paiement enveloppe les éléments rayés via StripeProvider PaiementMéthodForme refactorisé qui s'attache à un groupe de facturation (pas un ancien client au niveau de l'organisation). - Gérer le concept de panneau de groupe édi le titre / le contact de facturation / les autorisations de membre (Licence, gestionnaire de plan de groupe, canManageAbonnement, canManageBilling) et ajoute/supprime les membres. Le Groupe contrefaitment la lecture est libellé en lus - son fichier est implicite (toute personne n'est pas dans un groupe explicite), et pas de titre ou les modifications de l'autorisation sont autorisées. - /settings/account?tab-bilulation supprimé. BillingManager PlanCalculateur retiré. Liens partout mis à jour avec le nouveau membre Plans et onglet Billing. - ParamètresStatusWindow /sets landing nav both élagué (trois voies) synchronisation selon la règle de nav-synchron). - BranchSetupManager obtient une nouvelle section "Commerce Markets" à l'intérieur du éditeur de modèle de sécurité, utilisant le nouveau SecurityModelMarketController pour attacher/détacher les marchés de la SUBSCRIPTION avec le public/le membre/ L'équipe-membre bascule. - Réécrit pour montrer par or Billing Groupes - abonnements par groupe - MRR. /settings/platform/events et /settings/platform/plans deviennent des pages réservées (leur contenu ancien sont partis avec la coupe Clean-late). Nouveaux mandataires de l'API: /api/sécurité/droits et Nouveaux usagesEndroits crochet consume SecurityService EntitlementService pour la mise à niveau des fonctionnalités UI. Fiches de consommateurs héritées du passé (StatsManager, FeaturesManager, BranchSetupManager) transportez des billets de contrôle jusqu'à leur abonnement Le code de portage est retravaillé sur les droits d'utilisation.
· SecurityService
Ajouter DroitsService et sécurité Marchés du commerce
- EntitlementService calcule les primes par membre de fonctionnalités en unionant en activité Le plan de facturation GroupLicense est une valeur initiale de niveau libre KamoCRM. Caches Projections de 15 minutes dans Redis talonnés sur MemberId. - EntitlementInvalidationListener souscrit au kamo.entitlements.invalidate Redis channel (MEMBRE:/GROUPE:/ORG: charges utiles) donc mutations de service de facturation se propager immédiatement. - EndroitsContrôleur à /api/sécurité/droits exposés /me, et un POST d'invalidation de cache. - SecurityModelMarketController à Charge/détache de commerceMarkets à un ChildOrgSecurityModel et retourne le Public/membre/membre de l'équipe booléens.

Votre univers vous attend.
Commencez gratuitement en quelques minutes. Ajoutez des produits quand vous êtes prêt. Pas de migration, pas de nouvelles connexions.
Gratuit pour toujours — aucune carte de crédit requise