このページでは評価の正確なルールを説明します。概念の導入は コア概念 を参照してください。
リソースツリーとタイプ
リソースはいずれかのアプリケーションに属し、ツリーとして構成され、最大 15 階層です。タイプによってどこに配置できるかが決まります。
| タイプ | 許可される親 |
|---|---|
| モジュール | 最上位、モジュール |
| メニュー、ページ | 最上位、モジュール、メニュー |
| タブ | ページ、タブ |
| ボタン | ページ、タブ |
| API、データエンティティ | 最上位、モジュール |
| フィールド | データエンティティ |
リソース間で依存関係を宣言できます。「必須」(リソースを許可する際に、依存するリソースも併せて許可する)と「任意」(管理者に通知するだけで、自動では許可しない)です。依存関係は循環できません。コンソールのページ、ボタン、およびそれらが必要とする API はフロントエンドの権限マニフェストで宣言され、サービス起動時に組み込みリソースとして同期されます。
権限付与の導出
あるアカウントについて、評価者はまず有効なロールを決定します。
- アカウントに直接割り当てられたロール。
- アカウントが属するユーザーグループ、部門(「下位部門を含む」上位部門の割り当てを含む)、そのアカウントが担う職位に割り当てられたロール。
- 現在時刻が有効期間内にある割り当てと、有効になっているロールのみを対象とします。
- 継承を展開します。あるロールのすべての祖先ロール(無効化された祖先は伝達しません)。
次に、これらのロールの権限付与をマージします。
- あるリソースを許可すると、そのリソース自身、ツリー上の祖先リソース(可視化のため)、およびそれが「必須」とする依存リソース(再帰的に)も併せて許可されます。
- あるリソースを拒否すると、そのリソースとそのすべての下位リソースに作用し、どの許可よりも優先されます。
- 無効化されたリソースとその下位リソースは効果を持ちません。
- システムロールは、そのモジュール(例:
system、data、platform)のサブツリー全体を許可することと同等です。
結果は、利用可能なリソースの集合と、そのうち API リソースに対応する権限コードです。
権限外アクセスの防止
- 「許可」を付与する際、付与者自身がそのリソースを利用できる必要があります(システムロールを保持する人物は、業務アプリケーションについてはこの制限を受けません)。
- ロールを割り当てる、または継承を設定する際、付与者はそのロールが各アプリケーションで対象とするすべてのリソースを自分も保持している必要があります。
- プラットフォーム管理者ロールは、現在それを保持する人物のみが割り当て、変更、削除できます。
- 「拒否」に制限はありません。権限付与の権限を持つ人物は誰でも権限を縮小できます。
データルール
データポリシーはロールに属し、「エンティティ × アクション × 効果」によって範囲を定義します。ALL(プラットフォームテナントのみ)、TENANT、ORG_AND_CHILDREN、ORG、CUSTOM_ORGS、SELF、CONDITION。データ行 1 件が利用可能となるのは、許可ルールを少なくとも 1 つ満たし、かつどの拒否ルールも満たさない場合に限られます。
条件は構造化された JSON であり、実行はできず、検証後にデータベースへ保存されます。
{ "and": [
{ "field": "status", "op": "eq", "value": "ACTIVE" },
{ "not": { "field": "orgUnitId", "op": "in", "value": { "var": "subject.orgUnitIds" } } }
] }変数は subject.id、subject.username、subject.orgUnitIds、subject.groupCodes、subject.positionCodes、now のみです。比較演算子はフィールドの型に応じて限定され、ネストは 5 階層、ノードは 50 個を超えられません。サービス側はルールを JPA Specification に変換し、SDK は同じ意味で業務アプリケーション内に変換します。
フィールドルール
フィールドポリシーは読み取り方式(表示、マスク、非表示)と書き込み方式(編集可、読み取り専用)を定めます。ロールが複数ある場合は最も緩い設定が採用され、設定がまったくない場合、フィールドは完全に開放されます。読み取りルールは JSON シリアライズ時に適用され(同じ DTO でも人によって見え方が異なります)、書き込みルールはサービス層で適用され、読み取り専用フィールドを変更するとフィールドを特定して GF-FIELD-001 を返します。
スナップショットとバージョン
評価の結果は権限スナップショットです。利用可能なリソース、権限コード、データルールとフィールドルールで構成されます。スナップショットはアカウントごとにキャッシュされ、権限付与、割り当て、継承、リソースカタログ、ポリシー、メンバー関係のいずれかが変化すると、該当する範囲(カタログまたはテナント)のバージョン番号が上がり、キャッシュが無効化されます。権限を必要とする各インターフェースは、応答ヘッダー X-Authorization-Version で現在のバージョンを返し、コンソールはそれに基づいてメニューを再読み込みするかどうかを判断します。オープン API は同じバージョンを ETag で表現します。
