intra-mart Accel Platform 認可 拡張プログラミングガイド 第5版 2014-04-01

サンプルについて

本書では簡単なアプリケーションを例に認可機構の拡張を作成したり連携処理の組み込みを説明しています。このサンプルはIM共通マスタモジュールにサンプルとして含まれており、デプロイするには IM-Juggling で、モジュールIM共通マスタを含め、なおかつサンプルを含める設定で war を作成してください。

ただし war をデプロイしただけではこのサンプルは動作する状態ではありません。後述の手順に従ってサンプルが動作するように設定する必要があります。

本書では解説に必要な部分のソースコードを引用しているためすべてのソースコードを掲載しているわけではありません。必要に応じてサンプルアプリケーションのソースも参照してください。

サンプルアプリケーションの仕様

サンプルアプリケーションの簡単な仕様を紹介します。

このアプリケーションは以下の機能で構成されています。

  • 登録されたデータを一覧表示する画面
  • データの登録機能
  • データの詳細を表示する機能
  • データを更新する機能
  • データを削除する機能

これに加えて、このアプリケーションで取り扱うデータに対して認可設定を行える認可設定画面部品を使用していますが、 アプリケーションの機能としては単純にレコードを追加・参照・変更・削除できるだけのものです。

../../_images/main.png

データの一覧表示画面

このアプリケーションに対して、認可機構と連携する仕組みが組み込んであり、以下のような権限制御を行えます。

  • 認可設定画面を使う権限がある人の場合、認可設定画面を開いてデータに対する権限を設定できます。 データを登録・削除すると認可機構のリソースも登録・削除されます
  • データに対する参照権限がある人のみデータの参照リンクが表示されます。
  • データに対する更新権限がある人のみデータの変更ボタンが表示されます。
  • データに対する削除権限がある人のみデータの削除ボタンが表示されます。

例えば、権限によっては上記の画面は以下のように見えます。

../../_images/main_ueda.png

権限が制限されているユーザの場合の表示

このガイドで認可機構に対して拡張する内容

このガイドでは上記のアプリケーションでの権限制御のために、認可機構に以下のような拡張を行うことを例としています。

  • サブジェクトの拡張

    intra-mart Accel Platform で標準的にサブジェクトとして設定可能なものは「ロール」や「組織」といった標準的に提供されている機能で管理されている情報のみです。サブジェクトの拡張を行う事でこれら以外の情報をサブジェクトとして扱うことができます。

    このガイドでは「ユーザの勤続月数(ユーザのプロファイルの有効期間)」と、サンプルアプリケーションのデータについて「データの所有者(リソースオーナー)」という情報をサブジェクトとして扱う例をもとに解説します。

    ../../_images/added_subject_types.png

    拡張されたサブジェクトの例

  • リソースの拡張

    リソースはリソースタイプに属しており、属しているリソースタイプによって取ることのできるアクションが決まります。intra-mart Accel Platform で標準的に提供されているリソースタイプは限られておりアプリケーションで使用したいアクションにそぐわない場合がありますが、リソースタイプを追加する事で独自のアクションが利用できます。また、独自のリソース構成を定義することでそのアプリケーションの管理するデータに限った認可設定画面を提供可能です。

    このガイドでは、サンプルアプリケーションが作成するデータに対して認可設定を行うために、新しいリソースタイプを作成し、データに対して「作成」「参照」「更新」「削除」のアクションを定義する例を解説します。また認可設定画面において、サンプルアプリケーションが作成するデータに対して上記サブジェクト拡張で解説する「ユーザの勤続月数(ユーザのプロファイルの有効期間)」および「データの所有者(リソースオーナー)」というサブジェクトのみを認可設定に利用できるようにする例も紹介します。

    ../../_images/original_resources.png

    拡張されたリソース/アクションの例

サンプルのセットアップ手順

このサンプルは動作させるために手動でのセットアップが必要です。 以下の手順に従ってサンプル資材をセットアップしてください。

  1. IM-Juggling で war を作成する。

    warを作成する際、モジュール構成に 「IM共通マスタ 認可連携モジュール」を含め、 Jugglingビルドウィザードの基本設定で 「サンプルを含める」のチェックボックスにチェックを入れてください。

  2. テナント環境セットアップの実行

    intra-mart Accel Platform をインストールして起動したら、まずシステム管理者でログインしてテナント環境セットアップを実行してください。

  3. サンプルデータセットアップの実行

    テナント環境セットアップが完了したら、続けてサンプルデータセットアップを実行してください。

  4. サンプルで使用するテーブルの作成

    パブリックストレージにある以下のSQLファイルを実行してデータベース上にテーブルを作成してください。

    %PUBLIC_STORAGE_PATH%/sample/im_master_subjecttypes/sample-authz-ddl.sql

  5. リソースタイプの有効化

    以下の設定ファイルの内容がコメントアウトされていますのでコメントを外します。

    %CONTEXT_PATH%/WEB-INF/conf/authz-resource-type-config/authz-ext-sample.xml

  6. サブジェクトタイプの有効化

    以下の設定ファイルの内容がコメントアウトされていますのでコメントを外します。

    %CONTEXT_PATH%/WEB-INF/conf/authz-subject-type-config/authz-ext-sample.xml

  7. サブジェクトリゾルバの有効化

    以下の2つの設定ファイルの内容がコメントアウトされていますのでコメントを外します。

    %CONTEXT_PATH%/WEB-INF/conf/declared-subject-resolvers/authz-ext-sample.xml

    %CONTEXT_PATH%/WEB-INF/conf/ondemand-subject-resolvers/authz-ext-sample.xml

  8. 認可サブジェクトコンテキストのデコレータの有効化

    以下の設定ファイルの内容がコメントアウトされていますのでコメントを外します。

    %CONTEXT_PATH%/WEB-INF/conf/context-config/authz-ext-sample.xml

  9. ポリシー部分編集定義の有効化

    以下の設定ファイルの内容がコメントアウトされていますのでコメントを外します。

    %CONTEXT_PATH%/WEB-INF/conf/authz-partial-policy-edit-config/authz-ext-sample.xml

  10. 認可リソースのインポート

    ジョブネットを使用してパブリックストレージの以下の認可リソースグループのインポートファイルをインポートします。

    %PUBLIC_STORAGE_PATH%/sample/im_master_subjecttypes/sample-authz-resource-group.xml

    ジョブネットの操作については「テナント管理者操作ガイド」を参照してください。

  11. システム再起動

    上記までの操作が完了したら、アプリケーションサーバの再起動を行ってください。


アプリケーションサーバが起動したら、Webブラウザからログインして

http://<HOST>:<PORT>/<CONTEXT_PATH>/sample/authz_ext_sample/list

にアクセスして、サンプルアプリケーションが表示されることを確認してください。

サンプルの資材一覧

サンプルの資材は java のソース以外は war に含まれています。 war を展開した状態では以下の場所に配置されています。

%CONTEXT_PATH%/WEB-INF/
 ├─conf
 │  ├─authz-partial-policy-edit-config (サンプルとして作成するポリシー部分編集設定)
 │  │      authz-ext-sample.xml
 │  │
 │  ├─authz-resource-type-config (サンプルとして作成するリソースタイプの設定)
 │  │      authz-ext-sample.xml
 │  │
 │  ├─authz-subject-type-config (サンプルとして作成するサブジェクトタイプの設定)
 │  │      authz-ext-sample.xml
 │  │
 │  ├─context-config (サンプルとして作成するコンテキストデコレータの設定)
 │  │      authz-ext-sample.xml
 │  │
 │  ├─declared-subject-resolvers (サンプルとして作成する declared-subject-resolver の設定)
 │  │      authz-ext-sample.xml
 │  │
 │  ├─message
 │  │  └─sample
 │  │      └─authz_ext  (ポリシー部分編集設定のキャプション)
 │  │              caption.properties
 │  │              caption_en.properties
 │  │              caption_ja.properties
 │  │              caption_zh_CN.properties
 │  │
 │  ├─ondemand-subject-resolvers  (サンプルとして作成する ondemand-subject-resolver の設定)
 │  │      authz-ext-sample.xml
 │  │
 │  └─routing-jssp-config (サンプルアプリケーションのルーティング設定)
 │          authz-ext-sample.xml
 │
 ├─jssp
 │  └─src
 │      └─sample
 │          └─im_authz_ext_sample (サンプルアプリケーションの実装)
 │                  add.js
 │                  del.js
 │                  get.js
 │                  header.html
 │                  keep_alive_button.html
 │                  list.html
 │                  list.js
 │                  update.js
 │
 ├─lib (サンプルの jar ファイル)
 │  └─im_master_subjecttypes-X.X.X-sample.jar
 │
 ├─plugin (サンプルのサブジェクトタイプを認可設定画面で選択可能にするプラグイン設定)
 │  └─jp.co.intra_mart.sample.authz.subject.search
 │          plugin.xml
 │
 ├─resources
 │  └─sample
 │      └─sql (DAOが使用する外部SQLファイル)
 │              DataDAO_getData.sql
 │              ProfileKeepAliveSIDDAO_getSubjectId.sql
 │              ResourceOwnerSIDDAO_getSubjectId.sql
 │
 └─storage
    └─public  ※ ここはパブリックストレージのディレクトリに読み替えてください。
        └─sample
            └─im_master_subjecttypes
                    sample-authz-ddl.sql
                    sample-authz-resource-group.xml

サンプルのjavaソースは以下からダウンロードできます。ダウンロードには製品のライセンスキーが必要です。

java
 └─sample
     ├─dao (サンプルアプリケーションやサブジェクトタイプが使用するDAO)
     │      DataDAO.java
     │      Data.java
     │      ProfileKeepAliveSIDDAO.java
     │      ProfileKeepAliveSID.java
     │      ResourceOwnerSIDDAO.java
     │      ResourceOwnerSID.java
     │
     ├─resource
     │  ├─link  (サンプルアプリケーションが認可と連携するユーティリティ)
     │  │      Linkage.java
     │  │
     │  └─type  (サンプルのリソースタイプ)
     │      │  SampleDataResourceType.java
     │      │  SampleDataModel.java
     │      │
     │      └─action  (サンプルのリソースタイプで定義するアクション)
     │              C.java
     │              D.java
     │              R.java
     │              U.java
     │
     └─subject
         ├─decorator  (サンプルのコンテキストデコレータ)
         │      ProfileKeepAliveContextDecorator.java
         │      ProfileKeepAliveSubjectIdContainer.java
         │
         ├─resolver  (サンプルのサブジェクトリゾルバ2種)
         │      ProfileKeepAliveSubjectResolver.java
         │      ResourceOwnerSubjectResolver.java
         │
         └─type  (サンプルのサブジェクトタイプ2種)
                 ProfileKeepAliveSubjectType.java
                 ProfileKeepAlive.java
                 SampleResourceOwnerSubjectType.java
                 SampleResourceOwner.java
                 SubjectTypeRuntimeException.java