紹介した通り、認可を行う際の「何を」にあたる情報がリソースです。リソースのキーとなる情報はリソースURIです。アプリケーションで認可機構を利用する場合、認可対象になるもの(「何を」にあたります)をリソースURIとして表現し、予め認可機構に登録します。これによって管理者がそのリソースの権限を管理できるようになります。ユーザがそのリソースを利用しようとした際には、アプリケーションはリソースURIで認可機構に問い合わせることで管理者がそのリソースをユーザに対して利用を許可したかどうかを判断することができます。リソースはリソースグループを使用して権限設定を階層的にまとめることができます。階層的に構成したリソースとリソースグループでは、上位に設定した権限設定を継承させて適用することができます。」を参照してください)これによってある程度まとまったリソースに対して認可設定を行うことができるようになっています。認可機構に対してAPIを使ってリソースを作成すると、リソースと対になるリソースグループが1つ作成されます。APIモデル上ではリソースとリソースグループの持つ情報は以下のようになっています。説明グループの階層にかかわる情報リソースは名称や説明を持ちません。リソースと対になっているリソースグループがリソースの名称や説明にあたる情報を保持します。このためAPIモデル上ではリソースとはリソースグループとリソースのセットの事になります。リソースURIの仕様¶リソースURIは認可機構がシステム上で認可対象を特定するためのシステム上一意な識別子です。リソースURIは以下のような構成の文字列です。RESOURCE-TYPE-ID:IDENTIFIER-COMPONENTそれぞれの意味合いを説明します。IDがまず先頭に必要です。(コロン)を使います。IDENTIFIER-COMPONENTこのリソースをシステムで一意に判別するためのIDを表す文字列です。アプリケーション名やアプリケーション内のコンポーネント名などで階層を区切って、システム上他のアプリケーション等と衝突することの無いよう設計する必要があります。「どうする」として紹介しているものをアクションと呼びます。アクションはユーザがリソースに対してどういった操作を行うかを表すものです。リソースは必ず単一のリソースタイプを持っており、このリソースタイプがどういったアクションをとりうるのかを決定しています。リソースタイプとアクションはJavaクラスとして実装されています。リソースタイプは以下のような責務を負っています。リソースタイプによってその関連が明示されます。リソースタイプの定義¶リソースタイプおよびアクションは必要に応じて実装を追加することができるようになっています。インタフェースを実装したクラスと、リソースを扱うためのモデルクラスを作成する必要があります。リソースタイプは以下のクラスを実装します。完全修飾クラス名jp.co.intra_mart.foundation.authz.model.resources.ResourceType<T>型引数Tはリソースのモデルクラスです。このモデルクラスには特に制約はありません。ここで定義したモデルクラスを使用してリソース登録を行ったりすることができるようになるので、役割として適切であればアプリケーションなどで使用している既存のクラスをそのまま使用したほうが取り扱い易くなるでしょう。注意ResourceTypeとリソースモデルクラスは1対1の関係で定義されている必要があります。他のリソースタイプとモデルを共有することはできないので注意してください。上記で定義したクラスは設定ファイルに記載することで認可機構に認識させます。以下のXMLファイルを作成します。配下XMLスキーマ%CONTEXT_PATH%/WEB-INF/schema/authz-resource-type-config.xsd下記は設定例です。モデルクラスを、それぞれ完全修飾クラス名で記述します。任意項目で、リソースのキャッシュコントローラクラスを完全修飾クラス名で記述します。リソースのキャッシュを行わない場合は、記述する必要はありません。手順や必要な準備について解説しています。リソースタイプを追加する際にはこちらも参照してください。」を参照してください。リソースのキャッシュコントローラの定義¶リソースの情報が頻繁に利用されることが予想される場合、適切なキャッシュを行うことでパフォーマンスを改善することができます。キャッシュを行うためのコントローラクラスを実装することで、リソースタイプごとに異なる戦略でキャッシュを実装することができます。インタフェースを実装したクラスを作成する必要があります。リソースのコントローラクラスは以下のクラスを実装します。手順や必要な準備について解説しています。リソースのキャッシュコントローラを追加する際にはこちらも参照してください。リソースグループセット¶リソースグループは階層構造をとっていますが、階層の先頭のリソースグループとその配下のツリーをリソースグループセットと呼称しています。リソース管理上、リソースグループセット毎に特定の目的をもってツリー構造が構成されています。新たにリソースグループセットを追加する場合は衝突がないよう注意してください。」を参照してください。リソースグループ汎用属性¶リソースグループには、システム稼動後に認可リソースを登録する機能が自由に設定可能な汎用属性を設定することができます。認可機能では以下の機能を実現するために利用しています。リソースの閉塞コラムリソースの閉塞については「閉塞」を参照してください。設定内容は任意の文字列で構成された属性キーと属性値の組み合わせで、マップのように管理することができます。属性キーは他の機能と重複しないよう、機能を示す固有ID(モジュールID)を接頭子にします。Summerより利用可能です。API¶リソース管理に関係する主要なAPI上の操作を説明します。詳細に関してはAPIリストを参照してください。マネージャクラス、および、ファクトリクラスは以下の通りです。マネージャクラスjp.co.intra_mart.foundation.authz.services.admin.ResourceManagerマネージャファクトリjp.co.intra_mart.foundation.authz.services.admin.ResourceManagerFactoryマネージャインスタンスはファクトリクラスを使用して取得します。ファクトリも自身のファクトリメソッドを持っていますので、以下のようにして取得します。ResourceManagerFactory.getInstance().getResourceManager();リソースとリソースグループの登録¶すでに説明した通り、APIでリソースを登録するとリソースグループがセットで追加されます。このため、概念上はリソースは必ずしもツリーの末端になるわけではありません。リソースグループのツリーの中に、リソースURIを持つノードが存在することになります。認可要求はリソースURIを使用してしか行えない点に注意してください。以下にリソースとリソースグループの構成を登録する例を示します。"1段目のグループです。"2段目のグループです。登録の結果の戻り値はリソースグループです。"2段目のグループです。subGroup);リソースグループの取得¶リソースグループはIDによる取得のほか、リソースに当たるリソースグループの場合URIで取得することができます。resourceManager.getResourceGroupByUri("service://sample/sample_path");リソースグループの名称、説明の更新¶リソースグループに対して名称と説明を更新できます。"1段目のグループです。desc);リソースグループの削除¶リソースに当たるリソースグループを削除すると、リソースも削除されます。リソースグループがリソースにあたるグループだった場合、リソースも削除されます。削除するリソースグループに配下がある場合、それらも削除されます。マネージャクラス、および、ファクトリクラスは以下の通りです。マネージャクラスjp.co.intra_mart.foundation.authz.services.admin.ResourceAttributeManagerマネージャファクトリjp.co.intra_mart.foundation.authz.services.admin.ResourceAttributeManagerFactoryマネージャインスタンスはファクトリクラスを使用して取得します。ファクトリも自身のファクトリメソッドを持っていますので、以下のようにして取得します。ResourceAttributeManagerFactory.getInstance().getResourceAttributeManager();使い方の詳細についてはAPIリストを参照してください。閉塞状態の管理は「リソースグループ汎用属性」を利用しますが、閉塞状態の管理するAPIとして「ResourceBlocker」を提供しています。コラムリソースの閉塞については「閉塞」を参照してください。Winterより利用可能です。マネージャインスタンスの取得¶マネージャクラス、および、ファクトリクラスは以下の通りです。マネージャクラスjp.co.intra_mart.foundation.authz.services.admin.block.ResourceBlockerマネージャファクトリjp.co.intra_mart.foundation.authz.services.admin.block.ResourceBlockerFactoryマネージャインスタンスはファクトリクラスを使用して取得します。ファクトリも自身のファクトリメソッドを持っていますので、以下のようにして取得します。指定したリソースグループとその配下のすべてのリソースグループに対して閉塞設定を行います。閉塞を行うリソースグループのID、リソースタイプとアクションを指定して閉塞を行います。指定したリソースグループ、および、配下のリソースグループの特定のアクションが閉塞されていた場合、指定したアクションがそのリソースグループが閉塞を行うアクションの一つとして追加されます。閉塞を行うリソースグループのIDを指定して閉塞を行います。指定したリソースグループ、および、配下のリソースグループの特定のアクションが閉塞されていた場合、そのリソースグループ自体を閉塞する状態として更新されます。指定したリソースグループとその配下のすべてのリソースグループに対して閉塞状態の解除を行います。閉塞を行うリソースグループのID、リソースタイプとアクションを指定して閉塞解除を行います。指定したリソースグループ、および、配下のリソースグループの特定のアクションが閉塞されていた場合、指定したアクションがそのリソースグループが閉塞を行うアクションから削除されます。リソースグループ自体が閉塞されている場合、閉塞状態が維持されます。閉塞を行うリソースグループのIDを指定して閉塞を行います。指定したリソースグループ、および、配下のリソースグループの特定のアクションが閉塞されていた場合も、その閉塞状態が解除されます。指定したリソースグループがアクションに対して閉塞されているかどうかを取得できます。指定したリソースグループ自体が閉塞されているかどうかを取得できます。リソースグループ自体が閉塞されているかどうかresourceBlocker.isBlock("im-menu-group-cat-im_global_nav_pc");ERとテーブル上の表現¶リソース管理に関係するテーブルのERを以下に示します。ここではAPI上のモデルとER上の関連を中心に説明します。テーブルの定義や認可機構全体のERについては別冊のテーブル定義書、ER図を参照してください。left_valueリソースグループを表します。リソースグループIDはシステムで一意なIDを持ちます。リソースグループは階層構造を持つことができ、特定のトップ配下のツリーをリソースグループセットという単位で管理しています。このセットを示すのがリソースセットIDです。リソースグループの階層構造のトップにあたるリソースグループはリソースグループIDとリソースグループセットIDが同じ値になります。左値はリソースグループセット内で一意の順序を示す0から始まる整数値です。リソースグループは画面上での表示順を保持しており、その順序を保持する値が左値です。この値はAPIによって自動的にコントロールされます。表示上の順序なので、リソースグループツリーの根から葉全体に対して連番が振られる形になっています。簡単な例を以下に示します。depthセット内における親子関係のすべてを保持します。簡単な例を以下に示します。descriptionリソースグループに対して表示名と説明を保持します。それぞれ各ローケルに対して保持することができます。resource_group_set_idリソースグループは階層構造を持つことができ、特定のトップ配下のツリー一式をリソースグループセットと定義しています。このセットを示すのためのIDがリソースグループセットIDです。この値は原則トップのリソースグループのリソースグループIDと同じ値です。resource_typeリソースを表すテーブルです。リソースの登録・削除に応じて追加・削除されます。リソースIDはURIのハッシュ値から生成される値のため、任意の値に設定することはできません。リソースタイプはこのリソースを取り扱うリソースタイプのIDです。resource_group_set_idリソースとリソースグループの関連を示します。リソースを作成すると対になるリソースグループが作成されるため、リソースが登録されるタイミングで登録されます。リソースに対応するリソースグループを削除するとリソースも連動して削除されるので、リソースグループ所属も合わせて削除されます。action登録されているリソースタイプと、リソースタイプが定義しているアクションをデータベース上で取り扱うためのテーブルです。このテーブルの情報は起動時か、最初にResourceManagerを使用するタイミングでリソースタイプの設定情報をもとに自動的に作成されます。このテーブルの情報は認可設定画面でアクションを適切に提示するために使用しています。attr_valueリソースグループに紐付ける汎用的な属性を取り扱うためのテーブルです。認可にリソースグループを登録した後、任意のキーで属性値を付加することができます。