GrantForge

    アーキテクチャとセキュリティ

    権限モデル

    リソース、権限付与の導出、継承、割り当て、データとフィールドのルールの正確な意味、および権限スナップショットとバージョン。

    このページでは評価の正確なルールを説明します。概念の導入は コア概念 を参照してください。

    リソースツリーとタイプ

    リソースはいずれかのアプリケーションに属し、ツリーとして構成され、最大 15 階層です。タイプによってどこに配置できるかが決まります。

    タイプ 許可される親
    モジュール 最上位、モジュール
    メニュー、ページ 最上位、モジュール、メニュー
    タブ ページ、タブ
    ボタン ページ、タブ
    API、データエンティティ 最上位、モジュール
    フィールド データエンティティ

    リソース間で依存関係を宣言できます。「必須」(リソースを許可する際に、依存するリソースも併せて許可する)と「任意」(管理者に通知するだけで、自動では許可しない)です。依存関係は循環できません。コンソールのページ、ボタン、およびそれらが必要とする API はフロントエンドの権限マニフェストで宣言され、サービス起動時に組み込みリソースとして同期されます。

    権限付与の導出

    あるアカウントについて、評価者はまず有効なロールを決定します。

    1. アカウントに直接割り当てられたロール。
    2. アカウントが属するユーザーグループ、部門(「下位部門を含む」上位部門の割り当てを含む)、そのアカウントが担う職位に割り当てられたロール。
    3. 現在時刻が有効期間内にある割り当てと、有効になっているロールのみを対象とします。
    4. 継承を展開します。あるロールのすべての祖先ロール(無効化された祖先は伝達しません)。

    次に、これらのロールの権限付与をマージします。

    • あるリソースを許可すると、そのリソース自身、ツリー上の祖先リソース(可視化のため)、およびそれが「必須」とする依存リソース(再帰的に)も併せて許可されます。
    • あるリソースを拒否すると、そのリソースとそのすべての下位リソースに作用し、どの許可よりも優先されます。
    • 無効化されたリソースとその下位リソースは効果を持ちません。
    • システムロールは、そのモジュール(例: 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 で表現します。

    GitHub でこのページを編集