Loading...

[Update] MBC CQRS サーバーレス フレームワーク v1.8.0 をリリース

MBC CQRS サーバーレス フレームワーク v1.8.0 をリリースしました。今回のリリースでは、マスターパッケージ(@mbc-cqrs-serverless/master)にシステム単位のアクセス制御と、組み込みルートを保護するコントローラー認可を追加しました。複数のシステムで 1 つのマスターデータを共有しながら、システムごと・設定ごとに読み書きできる範囲を分けられます。あわせて、マスターコピーと MySQL での検索の不具合を修正しました。

マスターパッケージを使っているすべてのアプリケーションで挙動が変わります。キーの検証が厳しくなり、# や @ を含むコードなどは 400 で拒否されます。アップグレード前に、下記の「アップグレード時の注意」と移行ガイドをご確認ください。

主な変更点

新機能

  • システム単位のアクセス制御: マスター設定に systemId を持たせられるようになり、そのデータ行は設定の systemId を引き継ぎます(shared はすべてのシステムが受け取るデータ用に予約されています)。@MasterAccessResolver() を付けたクラスを 1 つ登録すると、システムごと・設定ごとに読み取りと書き込みを許可できます。サービスはすべてのメソッドで権限をチェックし、一覧は SQL のクエリ内で絞り込むため、ページネーションと総件数も正しく保たれます。
  • コントローラー認可(controllerAuth): 組み込みのマスタールートを保護するオプトインのモジュールオプションです。読み取りには read のロール(既定はログイン済みの任意のユーザー)、書き込みには write のロール(既定は system_admin)が必要で、呼び出し元のテナント以外は扱えません。設定しない場合、ルートは従来どおり保護されず、起動時に警告がログに出ます。mbc new で作成する新しいプロジェクトでは、controllerAuth: {} が最初から有効です。
  • UI・運用向けの機能: アクセス制御の有無と呼び出し元の権限を返す GET /api/master-access、既存データに systemId を付ける MasterSettingService.assignSystem、共通テナントの行を一覧に含める includeCommon を追加しました。
  • モジュールオプション: 共通マスターデータを持つテナントを指定する commonTenantCode(既定 common)、マスターコピーのハンドラーを登録する enableCopyTask、データベースを指定する databaseProvider(postgresql / mysql。既定では Prisma クライアントから自動検出)を追加しました。
  • RDS: プロジェクトテンプレートの RDS マスターテーブルに NULL 許容の system_id カラムを追加し、API レスポンスのトップレベルで systemId を返すようにしました。

バグ修正

  • マスターコピー: コピー元の設定のテナントからデータを読むようになりました(以前はハードコードされた meltec テナントから読んでいました)。また、シーケンスがコピーされていなかった問題を修正しました。コピー先のシーケンスがコピー元より遅れている場合はコピー元の値まで進みます。書き込みは条件付きのため、その間に採番したコピー先が巻き戻されることはありません。
  • MySQL での検索: master と survey-template で、名前・コード・キーワード検索が MySQL(mbc new の既定のデータベース)で失敗していた問題を修正しました。dist ファイルを patch-package などで修正していた場合は、そのパッチを外せます。
  • 部分更新: settingValue を省略した設定の更新で attributes が消えなくなりました。name や seq を省略した更新でも、既存の値が保持されます。
  • 一括書き込み: すべての一括ルートで、最初の書き込みの前に全項目のキーを検証するようになりました。無効なコードを含むリクエストで、有効な項目だけが書き込まれることはなくなりました。

アップグレード時の注意

  • キーの検証: 設定コード、マスターデータの settingCode と code、グループ・ユーザー設定の userId と groupId は、空であってはならず、# や @ を含んではなりません。違反するリクエストは 400 になります。メールアドレスなど @ を含む値を userId やコードに使っている連携は、アップグレード前に確認してください。
  • @ を含む保存済みの行: v1.7.0 以前では、@ を含むコードはキーが @ の位置で切られて保存されていました(別の行を上書きしていた可能性があります)。キーに @ が残っている行は、一覧には表示されますが、API から更新・削除できなくなります。有効なキーで作り直し、古い行は DynamoDB と RDS から直接削除してください。確認方法は移行ガイドにまとめています。
  • 設定行とデータ行のルート分離: 設定行は /api/master-setting、データ行は /api/master-data からだけ変更できるようになりました。
  • マスターコピーの権限: controllerAuth を設定している場合、POST /api/master-setting/copy には custom:roles クレームの system_admin が必要です。
  • 一括 upsert: POST /api/master-bulk は設定を先に、データを後に書き込むようになりました。リクエスト全体はアトミックではなく、リゾルバーを登録している場合、権限のないデータ項目があると設定だけが書き込まれた状態で失敗します。部分的な書き込みが問題になる場合は、設定とデータを別のリクエストで送ってください。
  • リゾルバーを使う場合: 既存のプロジェクトは RDS の masters テーブルに system_id カラムを追加し、RDS ハンドラーで systemId を書き込むよう変更する必要があります。サーバー側のコードから読み取りメソッドを呼ぶときは、invokeContext を渡してください。
  • タスク: GET /api/tasks/sfn-task-parent は、custom:tenant クレームを x-tenant-code ヘッダーより優先するようになりました。

ドキュメント

  • ドキュメントサイトのマスターパッケージに、キーのルール、コントローラー認可、システム単位のアクセス制御、データベースプロバイダーの節を追加しました。
  • GitHub リポジトリに、アクセス制御とシステムごとの同期を解説したガイドを追加しました。
  • mcp-server: mbc-migrate スキルに v1.7.0 → v1.8.0 の移行ガイドを追加し、互換性マトリックスに v1.8.0 を追加しました。

アップグレード方法

npm install @mbc-cqrs-serverless/core@1.8.0 @mbc-cqrs-serverless/master@1.8.0

ほかの @mbc-cqrs-serverless/* パッケージを使っている場合は、同じバージョンにそろえてください。新しいプロジェクトは npm i -g @mbc-cqrs-serverless/cli@1.8.0 でインストールした CLI の mbc new で作成できます。挙動の変更点と保存済みデータの確認方法は、ドキュメントサイトの「移行ガイド: v1.8.0」をご覧ください。

関連リンク

Top