チェンジログ
何が新しいの?
プラットフォームのすべての改良 それが出荷される
· InitializerService
マルチインスタンス電話/SMSプロバイダ移行
Hibernate ddl-auto:update の後に実行すると、新しいテーブル(VOIP PROVIDER INSTANCE)が作成されます。 BULK TEXT PROVIDER INSTANCE、PHONE EXTENSION、PHONE END USER、PHONE DEVICE、 PHONE VOICEMAIL, SYSTEM CONFIGURATION(システム・コンフィグレーション) kamo-shared-library commit 232d731. Hibernateができないものを扱います: - 従来の voip provider config/size text provider config から行をコピーする new * instance テーブル、provider タイプからインスタンス名を合成します。 - ドロップNOT CONFIGURED(ordinal 0)行 - 不在は「プロバイダなし」状態です。 - 今空のレガシー* configテーブルをドロップします。 - Member voip config、voip conversations、および kamotokens.org oauth token は、それぞれの org の最古のアクティブインスタンスを使用します。 - org oauth token固有のインデックスを(org id、provider)から再構築する (org id, Provider, instance id) なので、 org 作業あたりの複数の RingCentral インスタンス。 - 独自のインデックスを voip conversations + プロバイダーインスタンステーブルからドロップします。 - シード システム configuration シングルトン行 (voip sync 間隔 10min デフォルト、 true を有効にする — プラットフォーム 演算子は、新しいプラットフォーム config でこれを構成します。 VOIP及びSMSタブ。 すべての記述 idempotent; 既に無視されたDBで再実行することは安全です。 注文20 — SchemaCleanupRunner (1)の後に、組織タイプRemovalRunner (2)、 カモCRMAgeReqUpdateRunner (10).
· kamo-shared-library
マルチインスタンス電話/SMSプロバイダースキーマの基礎
- VoipProviderConfig → VoipProviderInstance の名前を変更します。UNIQUE(org id) をドロップし、インスタンス名、config json、last sync at、last sync error を追加します。 - BulkTextProviderConfig → BulkTextProviderInstanceの名前を変更します。同じマルチインスタンス処理。 - 新しいエンティティティ: PhoneExtension、PhoneEndUser、PhoneDevice、PhoneVoicemail、システム構成。 - MemberVoipConfig、VoipConversation、OrgOAuthToken(multiple RingCentralインスタンス/org)に追加します。 - 新しい列: PhoneExtensionStatus、PhoneEndUserStatus、PhoneDeviceType、PhoneDeviceRegistrationStatus。 - 正式なNOT CONFIGUREDで*********************** (enumType.ORDINAL の下で既存の行を保存するために、元の 0 で区切って下さい)。 - FLOWROUTE を新しい Flowroute SMS プロバイダーに BulkTextProviderType に追加します。 - プロバイダ行動DTO(ExtensionDto、PhoneUserDto、DeviceDto、VoicemailEntryDto、InstanceHealthDto、Create/Updateリクエスト)。 マルチインスタンス電話/SMSリファクタの第1フェーズ — ************************ (kamo-login repo) を参照してください。 KamoInitializerマイグレーション+サービスレファクタがフォローします.
· KlusterServices
FreePBX 17 + jigasi SIP ブリッジを k1m1 と k2m1 にデプロイする
FreePBX (tiredofit/freepbx:17-latest) は hostNetwork で実行されるため、SIP/RTP 実際のクライアント IP を保存し、nodeSelector 経由で 1 ノードをピン留めします。 SIPについて 5060 UDP/TCP (5061 TLS)、Janusを避けるために選ばれるRTPの範囲18000-18999 (20000-20999)、コターン(52000-65535)、およびWireGuard (51820-51821)。 内部の ClusterIP SIP 橋として Jigasi に会って下さい従って FreePBX はできます ミート会議へのトランク呼び出し; Prosodyは現在、ジガスユーザーを規定する JIGASI XMPP PASSWORDから Traefik経由で到達可能なUI pbx.k1.kluster.kamocrm.com / pbx.k2.kluster.kamocrm.com と certs auto-cert STATIC DOMAINS によるシード.
· kamo-internal
プラットフォーム管理者ビュー、パジネーション、ライブ検索、フィルタ、orgロゴ
プラットフォーム管理者(トップレベルのオーガナイザー)は、システム内のすべてのオーガナメントを経由して表示します 独自のメンバーシップではなく、新しい /api/security/org/all-networks エンドポイント。 ヘッダーのタイトルとサブタイトルの更新は、管理者のコンテキストを反映します。 その他の機能: - Pagination:クライアント側、デフォルト25/ページ、構成可能(10/25/100) - ライブ検索:タイトル、ショートタイトル、またはリアルタイムのドメインによるフィルタ - フィルタチップ:「すべて」、「私が所有するラグ」、「DNS Not Yet Configured」 - ページサイズのセレクターの横に表示された結果のカウント - ページ番号のボタンは、大ページ数のリプサイが崩壊します - OrgLogo コンポーネントは、ロゴのレンダリングを一元化(getOrgLogoUrl によるショートロゴ) 現在のカードとリスト内のすべてのオルガカードの両方 - org.memberId(共有ユーザー+メンバーレコード)が正しくガードするボタン - CANEnterAsSystemMember の全てのオーガニゼーションでシステムメンバが利用可能
· SecurityService
プラットフォーム管理者にGET /api/security/org/all-networks を追加
トップレベルのオーガナの所有者は、システム内のすべての組織を獲得できるようになりました 発信者に対する会員情報。 発信者がメンバーを持っているオラグ レコードは isOwner/memberId がポップアップし、 他の人は memberId: null, isOwner: false を取得します。 Endpoint は、呼び出し主がトップレベルの org で、所有者であることを強制します.
· kamo-internal
セキュリティモデルエディタ+クリーンアップのサブタブ
- セキュリティモデルエディタの****************が分割されました 4つのサブタブに:一般(基本情報、可視性、誰が作ることができるか、 プラットフォーム設定、ドメイン構成、商取引市場)、検閲(アルコール/ タバコ/防火剤+会員+チームメンバー年齢範囲)、許可されたアプリ、および デフォルトのセキュリティロール。 メニュー 管理者がモデルの編集をしてみましょう allowRootSubdomains フラグと親エイリアスは、その残りの部分と一緒に モデルの設定。 以前は、org-wide Subdomain に住んでいました。 ブランチポップアップ. - サブドメインブランチのポップアップは、orgレベルのビットだけに簡素化されます — GoDaddyの資格情報+マスターはトグルを有効にします。 Per-modelエイリアスが動かされた ダイアログとプロップ面の両方。 SecurityRoleManager は、 今未使用のプロップも。 - TeamMemberPayFeesSetting/PayFeesSetting にすべての参照を取除いて下さい/ TriStateFeeOption — "Employee Self-Pay Kamo Fees" が選ばれる モデルエディタとモデルテーブルのチップがなくなり、 useAppliedModel のエイリアスを入力します。 - /settings/platform/eventsおよび/settings/platform/plansのページはあります 削除(非推奨の請求面からのプレースホルダーでした)。 ランディングページ、SettingStatusWindow サブトピックリスト、および route/icon 一致するエントリをドロップします。 - グループのサブタブを管理します。 デフォルトグループのタイトルを無効な読み取り専用フィールドとして表示します(was) 以前は情報アラートの後ろに隠されていたので、管理者は情報アラートの背後にある グループの名前を変更できません.
· kamo-internal
ブランチタイプのページ上のAlias可視性UI +サブドメインブランチボタン
サブドメインブランチダイアログ: - エイリアスエディタは、テーブルスタイルの列リスト表示でチップリストを交換 エイリアスごとのメンバーとチームメンバーのチェックボックス — 管理者は、 /network/create の各親エイリアスを参照 - onUpdateModelSubdomainConfig は、完全なエイリアスオブジェクトを渡すために更新しました プレーン文字列の代わりに(alias, seetoMembers,可視ToTeamMembers) SecurityRoleManager: -fullSecurityModels の状態 + loadFullSecurityModels マップエイリアスと メニュー フラグ - persistModelSubdomainConfig は、バックエンドにフルエイリアスオブジェクトを渡します ブランチセットアップマネージャー メニュー - サブドメインブランチボタン(ミラーセキュリティロールページ)を追加 同じSubdomainBranchesDialog、マウント上のステータスフェッチ、およびモデルリロード ダイアログが開くとき
· SecurityService
エイリアス可視性フィルタリング+サブドメイン所有権の自動検証
組織管理者: - Web-alias org の作成は、所有権を自動マークしますVerified=true と 作成した OrgDomain で isDnsVerified=true — 以来必要な TXT レコードなし 私たちは、GoDaddyに代わってDNSを約束しました - CUSTOM ParentAliasType パスは、パーエイリアスの作成者タイプの可視性を強化 (ミラー/creatable フィルター従ってバックエンドはバイパスできません) BranchTypeController /creatable: - parentAliases リストは、呼び出し者の createType によってフィルタリングされます。 MEMBERS は displayToMembers=true エイリアスのみ表示され、TEAM MEMBERS は表示されません。 seeToTeamMembers=true エイリアス、OWNERS すべてを見る - 各エイリアス DTO には、可視ToMembers +可視ToTeamMembers フラグが含まれている SecurityModelController: - processSubdomainBranchConfig は今読みます メニュー alias のマップオブジェクトから、replaceAllFull を呼び出すことで、それらを永続化
· kamo-shared-library
パーエイリアスのクリエイター型可視性フラグを追加
目に見えるToMembers /可視ToTeamMembers boolean カラムを追加 ChildOrgSecurityModelAlias では、どの親エイリアスを制限することができます。 子のorgsを作成するときにメンバーとチームメンバーに表示される。 - エンティティ: 2 @ビルダー。 BOOL DEFAULT TRUEでデフォルト真の列 - SubdomainAliasDTO: fromEntity の両方のフラグを公開します -********************新しいAliasEntryレコード+置換すべて 可視性を主張する過負荷; replaceAll(strings) はそれに委任します
· kamo-internal
設定ダイアログ、ウェブエイリアスウィザードパス、DNSプロビジョニングパネル
サブドメイン ブランチ UI を 3 つの面に追加します。 -********************新しい「サブドメインブランチ」ボタン org-level のダイアログを開き、toggle + GoDaddy creds を切り替えます。 allowRootSubdomains + 親エイリアス (reuses) 用の per-security-model エディタ ウィザードの isValidAlias/toSafeAlias ヘルパー) - /network/create: BasicsStep は、ウィールダウンドメイン間のブランチ path と Kamo web-alias パス (親 org の enable フラグで指定) GoDaddy ステータスと、選択したブランチタイプのエイリアス)。 両親のアリアス ドロップダウンリストROOT(許可されている場合)とモデルごとのエイリアス;ライブヘルプ フィールドが変更されるユーザーによるプレビュー更新 - /setup/dns:新しいDNSProvisioning パネルは、org のプロビジョニングログと 再試行禁止アクションでGoDaddyのステータスを1レコードごとに表します By Next.js BFF プロキシ ルート アンダー ********************
· SecurityService
Org-level config、GoDaddy クライアント、Web-alias org はパスを作成します
新しいサブドメインブランチをワイヤーで縛ると、バックエンドのエンドツーエンドが機能します。 - orgレベルのSubdomainBranchesControllerは+GoDaddyのcrudsを可能にしました(live-verified) - GoDaddyDnsClient は、重要な CNAME の upserts と credential checks を実行します。 - DnsProvisioning(ドンスプロヴィング) サービスの非同期キューは、標準の既知のAliasesサブセットと OrgDnsProvisionLog へのレコード行ごとの書き込み - SecurityModelController は allowRootSubdomains + aliases[] を実行します。 作成/更新 -****************はウェブエイリアスパスを受け入れる (useWebAlias + parentAliasType + parentAliasId + webAlias) は、 親のルートゾーンの下にFQDNを生成し、DNSのプロビジョニングをキック トランザクション org が完成したら - BranchTypeControllerの/creatableエンドポイントは、モデルごとのエイリアスを公開します と 親 org サブドメイン ブランチの状態 なので wizard は UI をゲートできます
· kamo-shared-library
組織、暗号、エイリアス/DNS ログの足場を追加
ひとつのGoDaddyのクレジット(AES-GCM暗号化)、allowRootSubdomainsフラグを追加 セキュリティモデル、DNS のプロビジョニングに関するチャイルド・オリアス・コレクション 監査ログ、SecretCipher ヘルパーは、SecretCipher ヘルパーで、SecretCipher ヘルパーを使用して、SecretCipher ヘルパーを、SecurdService から往復に使用 フロントエンドに戻すことなく、保存されたAPIキー.
· kamo-internal
プレフィックス/サフィックスのドロップダウン、メールボックスのドメインゲート、明示的なステータス
- 名前の接頭辞および接尾辞はそれからpopulatedです NamePrefixType / NameSuffixType は org-config で配信 エンドポイント オプションごとに省略+フルネームを表示します。 - 「組織の電子メールメールボックスのプロビジョン」が無効になっています 組織の電子メールのドメインは、orgの検証済みのメールボックスの1つにマッチします ドメイン(GET /api/email/domains から送信) 明確なインラインメッセージング 確認されていないメールが不足しているかどうかを説明 ドメインの設定、ドメインの不一致、および実際の名前 設定されたドメインなので、管理者は何を使用するかを知っています。 - チームメンバーのステータスは、PROSPECT のデフォルトはなくなりました。管理者は、 ライフサイクル状態を明示的に選択するか、または送信するブロックされます。 インフォメーション パネルはステータスが選択されるまで「設定しない」を表示します.
· SecurityService
Explicit チームステータス + 名前 プレフィックス/サフィックス カタログ
- GET******************** が namePrefixs を返すようになりました。 namePrefixType と NameSuffixType からソースされる チームメンバーの追加/チームメンバーフォームの追加は、それらをハードコードする必要はありません。 - POST /create-team-member は omits のリクエストを拒否しました チームメンバーステータス (400). 前のサイレントPROSPECTフォールバックは 消える — 発信者は、ライフサイクル状態を明示的に選択する必要があります。 会員は、デフォルトでは誤解を招くことはありません.
· kamo-internal
フル幅、3パン追加 メンバーフォームレイアウト
フォームを作成して、コンテンツ領域全体を使用するようにします。 1100px を中心とするカラム。 - 3-列レスポンシブレイアウト:スティッキー左セクションnav(md +)、フル幅 フォーム(常に)、右側のライブサマリーパネル(xl+)。 - フィールド行は現在、利用可能な幅にスケール:名前セクションはmd +で5アップです、 xl のブレイクポイントで最大 4 倍のロール ラインを連絡します。 - スティッキーボトムアクションバーは、ステータスヒントとAでフル幅をスパン グラデーションプライマリCTA。 - セクション nav は、ユーザーがいるセクションを強調するためにスクロールスパイを使用します Click-to-scroll をサポート - 磨かれたカード様式–柔らかいボーダー、微妙なホバーの上昇、勾配 セクションヘッダーアイコン。 - 新しい右パネルのサマリーカードは、フォームデータライブ(アバター)をミラーリングします 初期値、名前、ユーザー名、電子メール、ロール、ステータスチップ)、および表示 バリデーションが通過したら、準備が整ったインジケーター.
· kamo-register
エイリアス/メール/名前/電話を単一の「マイプロファイル」ステップにマージ
「My E-Mail & Alias」と「My Name」を組み合わせ、 「電話番号」は13以上の登録者のための1つの「マイプロフィール」ステップに進みます。 エイリアス + 電子メール + 法的名が必要と電話番号オプション (入力時にSMSで検証) Under-13 登録者 現在見る 「My User Alias」の1つの名前は、電子メール、法的名、または電話なしです。 - RegisterFlow: 単純化されたステップリスト、統一されたハンドル次の検証、 新しいrenderStepContent ケース。 プロフィールのステップは内部にあります 3つのセクションがビューポート内で収まるので、スクロール可能。 - RegisterStatus は、13 未満の完了に対して "REGISTERED" 値を獲得 確認するメールがない場所 — 直進する ?registered=1 のログインページは、メール検証画面の代わりに表示されます.
· SecurityService
電子メール + 法的名は、下-13のサインアップのためにオプション
/api/security/register エンドポイントは、以前にリクエストを拒否しました 電子メール、名前、または最後の名前を欠落させます。 アンダー13 パスを作った (KIDS ONLY orgs, または ALL AGES を sub-13 registrant) 不可能 — これらのアカウントは正当にエイリアス+パスワード+シードフレーズのみを持っています。 バリデーションは、エイリアス + パスワードをすべてのパスに要求し、処理を行います。 電子メール + 姓 + 姓 または 名 トリプル: 供給 どれも3つすべてが必要です。 確認メールが送信され、 応答メールフィールドは、メールが実際にあったかどうかを監視します 提供され、応答の状態は「登録済み」です(vs は既存の 確認メールがない場合、「EMAIL VERIFICATION REQUIRED」」.
· kamo-shared-library
Add******************** で入るチェック
· kamo-internal
システムユーザー設定ページ+システムメンバとしてネットワークエンター
プラットフォーム管理 → 設定、親組織の所有者のみを追加します。 プラットフォームを偽装する権限を付与または呼び出すページ 部署、役職、チームメンバーによるシステムユーザー 全3ヶ所に登録(設定ページタイルリスト) SettingsStatusWindow は + サブトピックとページ自体をルートします。 /network を更新し、新しい /api/security/enter-as エンドポイントを使用する 既存の ENTER ボタンなので、宛先ドメインはセッションを受け取ります 対象のorgのメンバーから構築された(ソースのバグを修正) org's MemberID/orgID が新しいセッションに漏れました。 エントリーをそのまま追加 後にレンダリングするエンターの横にある SYSTEM MEMBER ボタン メニュー 呼び出し者が資格があることを確認します.
· SecurityService
バックフィル、入出力、変異ガード、コンフィグAPI
自己healプロビジョニング: SystemUserBackfillService は、すべて実行 SecurityService 起動 (DataLoader から) で is system user カラムを追加 と system user access テーブルが見つからない場合、シングルトンシステムを確保します。 ユーザーレコードが存在し、管理者権限チームメンバーを全員に作成 既に属していないトップレベルのorg。 また、 新しいorgsがシステムユーザーメンバーシップを取得できるように、組織時間を作成します 次の再起動を待つのではなく、すぐに。 クロスオーグフロー:古い/api/generate-otkハンドオフを置き換えます(これは 発信者のソースorgセッションを宛先ドメインに漏洩させる) /api/security/enter-as. ディレクティブ 新しいエンドポイントは、スコープ化された新しい***をビルドします。 対象となる org の実際のメンバーなので、memberID/orgID/rights は常にマッチします。 組織の入力 SUDO MEMBER ID フィールドをセッション JSON に追加する システムユーザの偽装が人員のIDを運ぶこと 監査アトリビューションについて ガード: SystemUserGuard は、システムへの API 主導のミューテーションを拒否します。 ユーザーの記録またはそのメンバーシップのいずれか(メンバーコントロールラーに有線) 会員セキュリティ管理者、******************************** 隠す GetMembersAndSubscribers、getTeamMembersAndContractorsのシステムユーザー、 そして、getMembersByDepartment エンドポイントでは、テナントはリストに表示されません。 Config 表面: SystemUserConfigController は、助成金の上にCRUDを公開します トップレベルの所有者のみの表、およびSystemUserCapabilityController /networkページがレンダーするかどうかを判断するために使用するブールを返します。 システムメンバーボタンとして入力.
· kamo-shared-library
システム ユーザーフラグ + アクセス グラント エンティティティを追加
User.isSystemUser フラグのプラットフォーム全体のシステム ユーザーモデルを導入 (unique 部分的なインデックスはシングルトンを強制します)、および SystemUserAccess テーブル トップレベルの部門、職歴、チームメンバーのレコード システムユーザが子のorgsを入力すると偽装する可能性があります。 アクセス行は プラットフォーム内部(ロールレイトタイプエントリーではなく) テナント向け権利面.
· kamo-register
電話認証+セキュリティ質問の手順を追加する
パスワードとアカウントの回復と13 +の2つの新しいステップをインサート registrants: 電話番号のステップ(任意、SMSコードと、スキップ可能) 検証)およびセキュリティ要求ステップ(必須、3つの異なる) お問い合わせ Under-13 登録者は引き続き両方をスキップします そして回復のための彼らの種のフレーズに頼って下さい。 - FormPhoneNumber: idle -> 入力コード -> 検証済みのステートマシン、 パーステップのキャプチャウィジェットは、SMS送信、変更番号、パスをスキップします。 - FormSecurityQuestion: 3つのドロップダウン+回答、独自性強化、 新しいパブリックバックエンドエンドポイントから取得されたカタログ。 - 登録フロー:新しいフォームデータフィールド、条件付きステップ、ハンドル次 バリデーション、電話 + セキュリティ 送信されたボディにワイヤーで縛られた質問。 - /api/security プロキシは、X-Forwarded-Host を転送し、バックエンドは SMSプロバイダの選択のためのorgを解決して下さい.
· SecurityService
サインアップ時に電話 + セキュリティに関する質問を収集
電話番号とセキュリティ要求のコレクションをセルフサービスに移動 登録フロー(もともと意図していた場所)ではなく ポストサイン設定ページが必要です。 - 新規登録電話サービス:6桁のSMSコードを経由して生成/検証します BulkTextSmsClient、10分TTL、5時間毎のレート制限。 - 登録サービスは現在、オプションで登録パラメータレコードを受け入れる 検証済み 電話および3-entryセキュリティ要求リスト;セキュリティ質問 既存の回答正規化ルールでbcrypt-hashedです。 - /api/security/register は受け付けます メニュー ユーザーが主張する前に、コードに対して検証された電話を主張します。 - 新規公開エンドポイント POST /register/phone/initiate (CAPcha-gated), POST /register/phone/verify, GET ************************
· kamo-shared-library
登録PhoneCode のエンティティティ + リポジトリを追加
新しいテーブル `registration phone codes` は 1 ショットの SMS 認証コードを保存します セルフサービスの登録時に発行される、ユーザのエンティティティが存在する前に。 NULL userId を運ぶことを避けるために、AccountVerificationCode から分離した Kept そのテーブルの上に.
· kamo-internal
チームメンバーの追加/チームメンバーページの追加
- /account:タブスコープボタンで単一のあいまいボタンを置き換える メンバータブに<Member>を追加し、チームメンバータブに<Team Member>を追加。 各ボタンは、古い壊れた代わりに専用のページを作成するためのルート 会員詳細ビューにフォールスルー。 - 新しい /settings/member/new および /settings/team-member/new ページ、両方 "variant" プロパティで共有された MemberCreateForm がバックアップされます。 - フォームは単一ページ、セクション指向レイアウト(名前、アイデンティティ、連絡先、 orgメールボックス、チームメンバーのみの役割/位置、レビュー)。 ライブユーザーレビュー ユーザーが既に存在しているか、既にリンクされているときに電子メールとユーザー名が警告します この組織のメンバーとして - org の AgeReqType を称える: 要件が 13 未満のユーザーを許可する場合 個人および組織の電子メール フィールドは隠され、ユーザー名はなります プライマリ識別子。 - 任意「組織メールボックスのプロビジョン」のチェックボックスは作成します メールボックスをEmailService経由で送信し、メンバーのプライマリメールボックスとして割り当てます。 - /settings/member/[id] のプロファイルタブには、Work Location、Team が含まれます。 会員のステータス、チームメンバーのレコードの正式なジョブタイトル、有線 既存のPUT /api/security/members/{id}エンドポイントへ.
· SecurityService
チームメンバーの追加/チームメンバー作成フローの追加
- 新しいメンバーCreateController を公開: ********************* — 年齢、タイムゾーン、部署、役職 * GET ************ — 電子メールまたはユーザー名による存在チェックを無効に * POST /api/security/members/create — 発信者のorgでメンバーを作成 * POST **************** — チームメンバーの作成 部門/職名/勤務地/会員資格/セキュリティレベル - 既存のユーザーを電子メールまたはユーザー名が既にマッチしたときに再利用します。 それ以外の場合 net-new ユーザを作成し、 EMAIL VERIFICATION テンプレートを送信します。 ウェルカム テンプレートは常に作成に送信されます。 - AgeReqTypeが13未満のユーザーを許可する組織の場合、メール収集は 省略されたユーザ名はプライマリ識別子になります。 - GET /members/{id} を拡張して、場所 + チームメンバーステータス + チームメンバーのオーナメントと、PUT が永続する場所へ TeamMembershipStatus, レコードがTeamMemberの場合のjobTitle公式です。 - 既定のロール割り当て + 会員サービスに委任される権利の材料化 そのため、新しいメンバーは既に適用された有効な権利で土地を埋めます。 - Fix EntitlementService: booleanゲッターはgetIsOrganizationを綴った プロフィール (Lombok は、原始的なブールガンフィールドの isOrganizationOwner を生成します).
· kamo-shared-library
Add AgeReqType.allowsUnder13()ヘルパー
チームメンバーを追加/チームメンバーフローを追加してメールコレクションをスキップ 年齢要件が13歳未満のユーザーを許可する組織(ALL AGES) KIDS ONLY、ALL COPPA GRADS.
· kamo-internal
ビルインググループに関するメンバーの計画と請求の修正
- 会員ページ プラン&ビリングタブは現在、脈動の輝きと整列されます タブバーのStarRateアイコン。 閲覧された会員が閲覧されたときの可視性 署名されたユーザーまたは署名されたユーザーは、orgを所有しています。 コンテンツ分割 サブスクリプション、請求書、支払い情報、管理グループ。 課金グループセレクタのドロップダウン+「課金グループを追加」アイコンボタンライブ サブタブバーの右側に、グループ選択はすべてのパネルを駆動します。 - サブスクリプションパネルは、アクティブな市場ごとに1枚のカードが表示されます(FREE DEFAULT) カモCRMは常に存在します)、変更プラン/キャンセル/再活性化と per-seatライセンスアサイングリッド。 優先自動無効化が実行される 座席減少のサーバー側。 - 支払い情報パネルは、StripeProvider + aを介してストライプ要素をラップします 課金グループに添付するPaymentMethodForm(非公開) 古いorgレベルの顧客。 - グループパネルの管理は、タイトル/請求連絡先/メンバー権限を編集 (グループプランマネージャー、canManageSubscription、canManageBilling) メンバーを追加/削除します。 デフォルトグループは読み取り専用です。 暗黙(明示的なグループではない場合)、タイトルなし 許可の編集は許可されます。 - /settings/account?tab=billing 削除アウトライト。 ビリングマネージャー + プランの計算機を削除します。 新規会員に随時更新されたリンク 計画と請求タブ。 - 設定StatusWindow + /settingsは、両方の剪定を上陸させる(三方向) nav-sync ルールごとに同期します。 - BranchSetupManager は新しい「市場」セクションを内部で取得します セキュリティモデルエディタ、新しいSecurityModelMarketControllerを使用して、 スコープごとのSBSCRIPTION市場を添付/取り外し/会員/ チームメンバーのトグル。 メニュー per-org Billing を表示するための rewritten グループ+グループごとのサブスクリプション+ MRR。 /settings/platform/eventsおよび /settings/platform/plans はプレースホルダーページになります(旧コンテンツ) クリーンスレートカットでなくなっています。 - 新しい API プロキシ: /api/security/entitlements と メニュー 新規使用タイトルホック SecurityServiceのEntitlementServiceを機能格子で消費します UI。 レガシーコンシューマーファイル(StatsManager、FeatureManager、) BranchSetupManager はサブスクリプションベースまで @ts-nocheck を実行します。 gating コードは useEntitlements にリワークされます.
· SecurityService
Add EntitlementService + SecurityModel コマース市場
- EntitlementService は、非アクティブ化によるメンバー機能の助成金を計算します BillingGroupLicense プラン機能 + KamoCRM フリーティアベースライン。 キャッシュ Redis のプロジェクションは、EnerId のキーで 15 分。 - EntitlementInvalidationListenerがkamo.entitlements.invalidateに登録 Redis チャンネル (MEMBER:/GROUP:/ORG: ペイロード) なので、BillingService ミューテーション すぐに割り当てて下さい。 - /api/security/entitlements の EntitlementController は /me を公開します。 ******************** とキャッシュ無効化 POST. - SecurityModelMarketController に **************************************************************************************************************************************** CommerceMarketsをchildOrgSecurityModelにアタッチ/削除し、 パブリック / メンバー / チームメンバースコープ ボオランズ.
· BillingService
BillingGroups の周りの BillingService を書き換える
Org-level を削除します。 コントローラ、サービス、DTO 導入事例: - BillingGroupController 実装グループ、メンバー、サブスクリプション、ライセンス、 支払方法および/api/billing/groups の下のインボイス。 - BillingGroupService(ライフサイクル+デフォルトグループ+無料ベースライン)、 BillingGroupMemberService(ワングループパーメンバーの執行)、 BillingGroupSubscriptionService (Stripe sync with Fallback to FREE DEFAULT) のオプション メニュー 請求グループ請求書サービス LicenseService(自動無効優先+逆優先再活性化) - PlanCatalogService + PlanCatalogController で ************************ - StripeWebhookServiceはサブスクリプション/請求書/支払い方法イベントを消費します。 - EntitlementInvalidatorがRedisの無効化信号を公開する。 - PlatformAdminService + PlatformAdminControllerは、ロールアップごとに戻ります.
