intra-mart Accel Platform SAStruts+S2JDBC プログラミングガイド 第15版 2018-08-01

認可

画面にアクセス権限を設定するために

@Execute
public String index() {
    return "index.jsp";
}
アクションクラスの設定により画面へのアクセスが可能になりました。
しかし、このままでは実行メソッドの処理が行われる際に認可処理が省略されるため、誰でも画面を表示することができます。
実際にシステムを運用する際は、アクセス権限を設定して特定のユーザのみに画面を表示させ、アクセスの制限をかける場合がほとんどです。
この章では、 intra-mart Accel Platform で用意されている認可機能を利用して、用意した画面を特定のユーザにのみ表示させる手順を説明します。
実行メソッドの詳細については http://sastruts.seasar.org/featureReference.html#ExecuteMethod を参照してください。

認可とは

認可の概要

認可とは、認証機能によって特定されたユーザが要求するリソースへのアクセスを制御する機能です。
intra-mart Accel Platform では、 「誰が」「何を」「どうする」 を 「許可」「禁止」 で判定する共通的な認可機能の仕組みを提供しています。
../../../_images/authz_flow.png

サブジェクト

認可での 「サブジェクト」 は、「誰が」 の部分を示します。
intra-mart Accel Platform では 「ユーザ」「ロール」「会社・組織」「役職」「パブリックグループ」「パブリックグループ・役割」 の組み合わせで、権限を与える対象者を設定することができます。
../../../_images/authz_treegrid_subject.png

リソースとリソースグループ

認可での 「リソース」 は、「何を」 の部分を示します。
例えば、画面や Web サービスなどのサービス系、メニューやポータルなどのデータ系があります。
リソースは、 「リソースグループ」 によって親子階層を持たせることができます。
../../../_images/authz_treegrid_resource.png

リソースタイプとアクション

認可での 「アクション」 は、「どうする」 の部分を示します。
アクションの内容はリソースの種類(リソースタイプ)によって決まります。
例えば、画面では 「実行」 というアクションを 1 つのみ持っています。
../../../_images/authz_treegrid_action.png

ポリシー

認可での 「ポリシー」 は、「許可」「禁止」 の部分を示します。
各サブジェクト・リソース・アクションの組み合わせ分、ポリシーを設定することができます。
../../../_images/authz_treegrid_policy.png
ポリシーが未設定状態の場合は、親階層のリソースグループの権限を引き継ぎます。
最上位階層のリソースグループのポリシーが未設定の場合、 「禁止」 扱いとなります。

画面へアクセスするための認可設定方法

権限設定の流れ

ルータでは実行メソッドに設定された情報に基づいて認可に権限の問い合わせを行います。
問い合わせを行う際は、キーとして各リソース別に割り当てられた URI を使用します。
../../../_images/router_authz_chain.png
画面の権限設定をする場合の作業手順は以下の通りです。
  1. 実行メソッドに認可を紐づける
  2. 認可のリソースグループ、リソースを登録する
  3. リソースに対して権限を設定する

ステップ1:実行メソッドに認可を紐づける

認可に紐づけるため、実行メソッドに @Authz アノテーションを記述します。
@Execute
@Authz(uri = "service://sample/foo", action = "execute")
public String index() {
    return "index.jsp";
}
画面の場合、 uri プロパティには “service://” で始まる文字列を指定します。
ここの “service” が 「リソースタイプ」 を示す文字列で、 “service” は 「画面・処理」 を表します。
リソースタイプ “service” には、アクションとして “execute”(実行)が 1 つのみ用意されています。
そのため、 action 属性には “execute” を指定しておきます。

コラム

認可リソースマッパーを利用したい場合は mapperClass プロパティを設定してください。
ただし、 uri プロパティと mapperClass プロパティの両方が指定されている場合は uri プロパティが有効になります。
@Execute
@Authz(mapperClass = SampleMapper.class)
 public String index() {
     return "index.jsp";
 }
認可リソースマッパーに対するパラメータを指定したい場合は mapperParams プロパティに @AuthzMapperParam アノテーションを設定します。
@Execute
@Authz(mapperClass = SampleMapper.class, mapperParams={@AuthzMapperParam(key="paramKey", value="paramValue")})
 public String index() {
     return "index.jsp";
 }

ステップ2:認可のリソースグループ、リソースを登録する

サンプルで作成した画面と認可を紐づけるため、認可に対して以下の構成でリソースグループとリソースを登録します。
../../../_images/sample_resource_tree.png
リソースグループとリソースは 「認可設定画面から登録する方法」 と 「ジョブを利用してファイルから登録する方法」 があります。
認可設定画面からリソースを登録する場合は、 ステップ2-1:認可設定画面を利用して認可のリソースグループ、リソースを登録する の操作を行ってください。
ジョブを利用してファイルから登録するリソースを登録する場合は、 ステップ2-2:ジョブを利用して認可のリソースグループ、リソースを登録する の操作を行ってください。

ステップ2-1:認可設定画面を利用して認可のリソースグループ、リソースを登録する

テナント管理者で intra-mart Accel Platform にログインします。
http://<HOST>:<PORT>/<CONTEXT_PATH>/login
「サイトマップ」→「テナント管理」→「認可」の順にクリックします。
認可設定画面が開きますので、 「権限設定を開始する」ボタンをクリックします。(クリック後、下図の赤枠のようになります)
../../../_images/authz_settings_edit_start.png
まずはリソースグループを登録します。
リソース列の 「画面・処理」 にマウスカーソルを合わせると右側にアイコンが表示されますので、アイコンをクリックします。
../../../_images/authz_settings_open_policy_detail.png
「リソースの詳細」 ダイアログの 「配下にリソースを新規作成」 をクリックします。
../../../_images/authz_settings_policy_detail_new.png
「リソースグループID」 のテキストボックスに 「guide-sample-service」 を入力します。
「リソースグループ名」 の最も上のテキストボックスに 「プログラミングガイドのサンプル」 を入力します。
「リソースURI」 と 「説明」 は未入力のままでかまいません。
「OK」 ボタンをクリックします。 これでリソースグループが登録されました。
../../../_images/authz_settings_policy_new_dialog.png

コラム

「リソースグループID」 には任意の ID を指定できます。
「リソースURI」 を未入力状態にして登録することで、リソースをグループ化するためのリソースグループを作成することができます。

実際の開発時は、認可管理者に対して登録したリソースグループがどの画面・処理・データを表しているか明示するために、「説明」 を設定することをお勧めします。
「リソースの詳細」 ダイアログの 「リソースの階層」 から、作成した 「プログラミングガイドのサンプル」 を探します。
同じ行の右側にある 「開く」 アイコンをクリックします。
「プログラミングガイドのサンプル」 が選択された状態になります。
../../../_images/authz_settings_policy_detail_child.png

注意

リソースグループの配下にリソースが登録されていない場合、権限設定のグリッド上には表示されません。
「リソースの階層」 には表示されます。

コラム

「リソースの階層」 には選択されているリソース (グループ) の親階層と、子階層 (1 階層) が表示されます。
次にリソースを登録します。
「リソースの詳細」 ダイアログの 「配下にリソースを新規作成」 をクリックします。
「リソースグループID」 のテキストボックスに 「guide-sample-foo-service」 を入力します。
「リソースグループ名」 の最も上のテキストボックスに 「Hello World」 を入力します。
「リソースURI」 のテキストボックスに 「service://sample/foo」 を入力します。
「説明」 は未入力のままでかまいません。
「OK」 ボタンをクリックします。 これでリソースが登録されました。
../../../_images/authz_settings_policy_detail_new2.png

コラム

「リソースグループID」 には任意の ID を指定できます。
「リソースURI」 にはルーティングテーブルで指定した authz タグの uri 属性と同じ値を指定します。
「リソースURI」 を入力して登録することで、画面などのリソースに紐づくリソースを作成することができます。

実際の開発時は、認可管理者に対して登録したリソースがどの画面・処理・データを表しているか明示するために、「説明」 を設定することをお勧めします。
「リソースの詳細」 ダイアログの右上の 「×」 アイコンをクリックしてダイアログを閉じます。
これで認可に対して画面の表示に必要なリソースグループとリソースが登録できました。
次にステップ3 の操作を行います。

ステップ2-2:ジョブを利用して認可のリソースグループ、リソースを登録する

空の<authz-resource-group.xml>ファイルを作成して、以下を入力し保存します。
<?xml version="1.0" encoding="UTF-8"?>
<root
  xmlns="http://www.intra-mart.jp/authz/imex/resource-group"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.intra-mart.jp/authz/imex/resource-group authz-resource-group.xsd">

  <authz-resource-group id="guide-sample-service">
    <display-name>
      <name locale="ja">プログラミングガイドのサンプル</name>
    </display-name>
    <resource-group-description>
      <description locale="ja">プログラミングガイドのサンプルです。</description>
    </resource-group-description>
    <parent-group id="http-services" />
  </authz-resource-group>

</root>

注意

文字コードを UTF-8 にして保存してください。

コラム

authz-resource-group タグの id 属性には任意の ID を指定できます。
parent-group タグの id 属性には “http-services” を指定してください。

resource-group-description タグにはリソースグループの説明を指定できます。 タグは省略可能です。
実際の開発時は、認可管理者に対して登録したリソースグループがどの画面・処理・データを表しているか明示するために、説明を指定することをお勧めします。
次に、空の<authz-resource.xml>ファイルを作成して、以下を入力し保存します。
<?xml version="1.0" encoding="UTF-8"?>
<root
  xmlns="http://www.intra-mart.jp/authz/imex/resource"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.intra-mart.jp/authz/imex/resource authz-resource.xsd">

  <authz-resource id="guide-sample-foo-service" uri="service://sample/foo">
    <display-name>
      <name locale="ja">Hello World</name>
    </display-name>
    <resource-description>
      <description locale="ja">プログラミングガイドのサンプルです。</description>
    </resource-description>
    <parent-group id="guide-sample-service" />
  </authz-resource>

</root>

注意

文字コードを UTF-8 にして保存してください。

コラム

authz-resource タグの id 属性には任意の ID を指定できます。
uri 属性には実行メソッドで指定した @Authz アノテーションの uri プロパティと同じ値を指定します。
parent-group タグの id 属性には、先ほど作成した authz-resource-group の id 属性と同じ値を指定します。

resource-description タグにはリソースの説明を指定できます。 タグは省略可能です。
実際の開発時は、認可管理者に対して登録したリソースがどの画面・処理・データを表しているか明示するために、説明を指定することをお勧めします。
作成した<authz-resource-group.xml>と<authz-resource.xml>のファイルを、パブリックストレージのルート直下に配置します。
テナント管理者で intra-mart Accel Platform にログインします。
http://<HOST>:<PORT>/<CONTEXT_PATH>/login
「サイトマップ」→「テナント管理」→「ジョブ管理」→「ジョブネット設定」の順にクリックします。
../../../_images/sitemap_jobnet.png
「ジョブネット一覧」 から 「テナントマスタ」-「インポート」-「認可(リソースグループ)インポート」 を選択します。
画面下にある 「このジョブネットを編集する」 ボタンをクリックします。
「トリガ設定」 のプルダウンから 「繰り返し指定」 を選択して 「新規登録」 ボタンをクリックします。
「1回だけ実行する」 を選択状態にして 「決定」 ボタンをクリックします。
「有効」 のチェックボックスをチェックして、 「この内容でジョブネットを更新する」 ボタンをクリックします。
確認メッセージで 「決定」 ボタンをクリックします。
../../../_images/jobnet_settings_update.png
「ジョブネット一覧」 から 「テナントマスタ」-「インポート」-「認可(リソース)インポート」 を選択します。
同じ操作を行い、ジョブネットを更新します。
「サイトマップ」→「テナント管理」→「ジョブ管理」→「ジョブネットモニタ」の順にクリックします。
一覧に 「認可(リソースグループ)インポート」 「認可(リソース)インポート」 の2行が表示され、 「成功」 になっていることを確認します。
../../../_images/jobnet_monitor_search.png
これで認可に対して画面の表示に必要なリソースグループとリソースが登録できました。
次にステップ3 の操作を行います。

ステップ3:リソースに対して権限を設定する

「サイトマップ」→「テナント管理」→「認可」の順にクリックします。
認可設定画面が開きますので、画面左上の 「検索」 アイコンをクリックします。
「リソース(縦軸)の絞込」 のテキストボックスに 「Hello」 を入力して 「検索」 ボタンをクリックします。
../../../_images/authz_settings_search.png
リソース列の 「画面・処理」 の下に 「プログラミングガイドのサンプル」、さらにその下に 「Hello World」 が表示されていることが確認できます。
これでこのサンプル画面に対するリソースの登録が完了しました。
この状態で以下のURLへアクセスしてみます。
http://<HOST>:<PORT>/<CONTEXT_PATH>/sample/hello
HTTP 403 でアクセスできなくなったことが確認できました。
それでは最後にこの認可設定画面から、 「Hello World」 に対して認可設定を行います。
「サイトマップ」→「テナント管理」→「認可」の順にクリックします。
認可設定画面が開きますので、画面左上の 「検索」 アイコンをクリックします。
「リソース(縦軸)の絞込」 のテキストボックスに 「Hello」 を入力して 「検索」 ボタンをクリックします。
../../../_images/authz_settings_search.png
「権限設定を開始する」ボタンをクリックします。(クリック後、下図の赤枠のようになります)
「Hello World」 の行と 「テナント管理者」 の列が交わるセルをクリックして、緑色のチェックに変更します。
../../../_images/authz_settings_set_policy.png
この状態で、もう一度以下のURLへアクセスしてみます。
http://<HOST>:<PORT>/<CONTEXT_PATH>/sample/hello
今度はアクセスできることが確認できました。
この場合、 「テナント管理者」 ロールを持つユーザのみがこのサンプル画面を表示することができます。

コラム

このチュートリアルでは、下記のポイントを確認しました。

  • 画面へのアクセスを制御するために、認可を利用しました。
  • 画面の権限設定を認可で利用できるようにするために、認可と画面を紐づけるリソースとリソースグループを認可に登録しました。
  • 管理者が認可設定画面を開き、アクセスを制御したい画面のリソースに対して権限を設定しました。