機能
@nocobase/app-plugin-authz-restriction-rules がこの拡張を提供します。制限ルールは、指定した主体の既存のレコードの範囲を絞り込みます。その選択は、隠すレコードではなく、引き続き許可するレコードを記述します。一致するすべての制限が適用されます。
ルールの管理はアプリが担います。実行時の登録に加えて、認可のファクトリーが必要です。
シナリオと例
例
注文を読めるが機密でない注文だけを扱うべきインターンには、読み取りの制限で機密でない注文を選びます。機密の注文を共有しても、その制限を回避することはできません。
まず操作の付与を確認し、範囲を設定してから、許可されたレコード、除外されたレコード、API の直接の呼び出しを検証します。ルールを実際のアクセスに反映させるには、業務の照会が認可のポリシーを適用する必要があります。
開発用のプロンプト(アプリのディレクトリで作業するコーディングエージェント向け):
@nocobase/app-plugin-authz-restriction-rules を使ってください。注文の読み取り権限を持つ
インターンを機密でない注文に制限し、共有でその制限を回避できないことを検証してください。
認可の拡張は保ち、ルールの管理をその設定の権限とともに組み込んでください。レコードを設定する
前に読み取りの操作を確認してください。制限を回避するために管理者の付与を追加しないでください。
許可されたレコードと除外されたレコードを、API の直接の呼び出しで検証してください。完了の条件機密の注文が共有されても、インターンには機密でない注文だけが表示されること。
主な仕組みと実装
以下は、この例での組み込みの領域と、想定される画面の変化です。開発作業を記述したもので、実際のファイル構成はアプリに合わせてください。
| 組み込みの領域 | コードまたは設定の変更 | 画面と動作の変化 |
|---|---|---|
| プラグインの配列と server/config/authorization.ts | ランタイムを登録し、restrictionRules() を組み込む | エンドポイントとルールの評価を有効にする |
| アプリのルールの管理ページ | 選択肢、選択、保護された書き込みを組み込む | 管理者が意図したルールを管理する |
| 業務の照会とテスト | ポリシーを適用し、異なる主体でテストする | ルールが返されるデータに影響する |
組み込み
権限管理 と並べてその Client と Server の入口を登録し、マイグレーションを適用して、server/config/authorization.ts にファクトリーを追加します。
import { restrictionRules } from '@nocobase/app-plugin-authz-restriction-rules/server';
// Merge into the existing authorization configuration, retaining other extensions.
plugins: [restrictionRules()]実行時の登録は、ロケールとマイグレーションを提供します。設定のファクトリーが、ルールの動作と HTTP のエンドポイントをインストールします。パッケージをインストールしただけでは、それらは有効になりません。
ルールを設定して使う
選択は、すべてのレコード、明示的な ID、登録された recordAccess に対応しています。複数の制限は共通部分になるため、あるルールですべてのレコードを選んでも、別のルールを打ち消すことはありません。制限を削除するとアクセスが広がることがあるため、検証が必要です。
/api/authorization/restrictionRules は、一覧、作成、更新、削除と、それを支える選択のエンドポイントを提供します。管理ページはアプリが所有します。操作には、settings:authorization.restriction-rules に対する、対応する read、create、update、delete の操作が必要です。
ルールは保護されたエンドポイントで保存します。信頼できるサーバーのコードは、認可サービスの restrictionRules の API を使えます。独自の HTTP のラッパーでは、認可と入力の検証を保つ必要があります。
AI 開発の制約と検証
プラグイン固有の開発の制約
- 選択は引き続き許可するレコードを意味し、一致する制限は共通部分になります。ルールを削除するとアクセスが広がることがあるため、確認し直してください。
- ルールが変えるのはレコードで、ページ、操作、フィールドの付与ではありません。サーバーの照会がそのポリシーを適用していることを検証してください。
- root のアカウントだけでなく、unrestricted でない身元を使って、組み合わせたルール、削除、直接のアクセスを確認してください。
境界
ルールはページ、操作、フィールドの権限を付与せず、関連するレコードを自動で公開することもありません。制限ルールは、組み合わせた既定の範囲と共有の範囲を引き続き絞り込みます。unrestricted の身元はこれらのルールを回避するため、一般ユーザーでもテストしてください。
関連:権限管理、既定のデータアクセス、共有ルール、制限ルール。
これらはあなたの組み込みの検収の要件であり、実機での検証が完了したことを示すものではありません。実際の変更、実行したチェック、未検証の項目をエージェントに報告させてください。プロジェクトのガイダンス、スキル、共通のチェックについては アプリの開発を続ける と テスト を参照してください。
出典:公開のプラグインの入口と実装。