PEXA Clientについて

チュートリアル

定義パターン

定義ファイル

リファレンス

目次

  1. はじめに
  2. 実行権限の制御タイプ
  3. 実行権限の制御設定
  4. 権限制御対象
  5. 権限チェックポイント
  6. AccessControl定義の内容
  7. identityセクション
  8. descriptionセクション
  9. target-listセクション
  10. checkpoint-listセクション
  11. statusセクション
  12. AccessControl定義全体のサンプル


はじめに

このドキュメントは、PEXAクライアントフレームワークで使用する実行権限制御定義ファイルについて解説するものです。

実行権限制御定義ファイルは、SVOStatementとArea定義上の各要素(ComponentやCommand等)の関連を外部定義するためのXML形式の定義ファイルです。 この定義ファイルには、実行権限をチェックしたいSVOStatementに対して、それを実行する画面のコンポーネント、キーバインド、コマンドとのマッピングが記述されます。

定義ファイルの分割単位は、SVOStatementに対して1定義ファイルとなります。

実行権限制御定義ファイルの内部は、いくつかのセクションに分かれています。
以下でAccessControl定義ファイルの内容の概説およびそれぞれのセクションの詳細を解説していきます。


実行権限の制御タイプ

実行権限の制御タイプは以下の2通りがあります。

以下でそれぞれの場合の制御の流れについて説明します。

権限制御対象を指定して画面起動時に制御する

このタイプの制御では、画面の起動時に判定して対象Component等の無効化や非表示などを行います。
以下のような処理の流れとなります。

  1. Areaは、初期化タイミングで各要素(Component,Command等)のパーミッションを実行エンジンに問い合わせる。
  2. 実行エンジンは、問い合わせ対象が関連するSVOStatementを権限制御定義ファイルから取得する。無ければ制御しない。
  3. 実行エンジンは、画面の操作者がSVOStatementの実行権限を持っているか権限チェック機能の実体に問い合わせる。
  4. 権限チェック機能の実体は、呼び出し時に渡されたパラメータから画面の操作者が権限を持っているかをboolean値で返す。
  5. 実行エンジンは、権限があると判定された場合はnullを返す。権限がないと判定された場合は権限制御定義ファイルから制御種別(無効化or非表示)を取得してパーミッションを返す。
上記のように、このタイプの制御を行う場合は画面の初期化タイミングで判定がすべて行われます。
そのため、画面が終了するまでは権限による制御結果(無効化or非表示)が維持されます。

このタイプの制御を行う対象は、後述のtarget-listセクションに記述します。
指定できる対象については「権限制御対象」を参照してください。


権限チェックポイントを指定して処理実行時に都度制御する

このタイプの制御では、画面の処理実行時に都度判定して、権限が無い場合にメッセージ表示を行います。
以下のような処理の流れとなります。

  1. 実行エンジンは、画面上で発生したイベント受信時に権限制御定義ファイルを参照して、関連するSVOStatementがあるかチェックする。無ければ制御しない。
  2. 実行エンジンは、画面の操作者がSVOStatementの実行権限を持っているか権限チェック機能の実体に問い合わせる。
  3. 権限チェック機能の実体は、呼び出し時に渡されたパラメータから画面の操作者が権限を持っていなければ例外を送信する。
  4. 実行エンジンは、例外が受信されたらメッセージダイアログ表示して処理を中断する。
上記のように、このタイプの制御を行う場合は画面上での操作が行われる都度チェックが行われます。
そのため、画面起動中に権限による制御結果(権限がなければ中断)が変わることがあります。

このタイプの制御を行う対象は、後述のcheckpoint-listセクションに記述します。
指定できる対象については「権限チェックポイント」を参照してください。



実行権限の制御設定

PEXA ClientFrameworkの実行権限制御の仕組みでは、画面の要素とSVOStatementとの関連は定義ファイルで記述しますが、 権限有無の判定自体についてはPEXA実行エンジンの外部に切り離しています。

これは、画面のユーザー情報や権限情報の持たせ方がプロジェクト固有の案件となるため、 何を持って権限の有無を判定できるかも個別の案件となるためPEXA実行エンジン中に判定処理を組み込めないためです。

このため、各プロジェクト毎の要件に従って実際の判定処理を行う処理の実装を用意してPEXA実行エンジンにプラグインとして組み込む必要があります。 この設定は、プロパティの「権限チェック機能アダプタの実装クラス定義セクション」で行います。
以下で、この権限有無の判定処理の組み込みのための設定等について説明します。

権限チェック機能の実体を呼び出すアダプタプラグイン

実行権限制御定義ファイルでは、SVOStatementに関連する権限制御対象及び権限チェックポイントを定義しますが、権限有無の判定条件などは記述しません。 これは、実際にSVOStatementを実行できる/できないの判定処理自体がそれぞれのアプリケーション毎の個別案件となりうるため、実行エンジン内部では実装できないためです。

そこで、実行権限チェック機能の実体を呼び出すアダプタを外部からプラグインする形式をとっています。
実際の権限チェック処理を呼び出すアダプタを、PEXAが指定するインタフェースを実装したクラスとして作成し、それをPEXA実行エンジンにプラグインします。 これにより、各プロジェクト毎に異なる実装の権限チェック機能をPEXA実行エンジンから呼び出すことができるようになっています。

このアダプタプラグインは、以下のインタフェースをimplementsして実装します。

実装するインタフェース

pexa.client.std.access.AccessControlSubstance

このインタフェースでは以下の2つのメソッドが定義されています。
/**
 * ステートメントに対する実行権限チェックを行う。
 * チェックに引っかかった場合は例外が送信され、チェックOKの場合はそのままスルーされる。
 * @param statement 実行をチェックするステートメントID
 * @param parameters 実行チェック時に参照されるパラメータ
 * @throws AccessControlException 権限チェックに引っかかった場合に送信される。
 */
public void checkPermission(String statement, Map parameters) throws AccessControlException;
	
/**
 * ステートメントに対する実行権限の有無を返す。
 * @param statement 実行をチェックするステートメントID
 * @param parameters 実行チェック時に参照されるパラメータ
 * @return パーミッションがあればtrue
 */
public boolean getPermission(String statement, Map parameters);

checkPermissionメソッドはcheckpoint-listセクションに対する権限有無の判定でPEXA実行エンジンから呼び出されます。
getPermissionメソッドはtarget-listセクションに対する権限有無の判定でPEXA実行エンジンから呼び出されます。

このアダプタプラグインの実装内容に関する詳細についてはこちらを参照してください。


アダプタプラグインの実装クラスの指定

アダプタプラグインを用意したら、実装クラス名をプロパティで指定してPEXA実行エンジンにプラグインします。
この設定を行うことで、権限制御処理が動作したタイミングでここで指定した実装クラスが呼び出されるようになります。

設定キー

AccessControlSubstance.Class.Default

記述例:
# -------------------------------------------------------------------
#
# AccessControl関連のパラメータ
#
# -------------------------------------------------------------------
# 権限判定を行う実装クラス名
AccessControlSubstance.Class.Default=sample.client.plugins.access.DefaultAccessControlSubstanceImpl


アダプタプラグインに渡す実行時パラメータの指定

アダプタプラグインの実装クラスが呼び出される際には、引数としてSVOStatementのIDとMapが渡されます。
このMapにどのようなキーと値でパラメータを渡したいかをプロパティおよび権限制御定義ファイルの両方で指定できます。

プロパティで指定すれば、呼び出し時に必ず渡されるパラメータを一括設定することが出来ます。

設定キー

AccessControlSubstance.Parameter.[任意のパラメーターキー]

記述例:global参照による値を"LoginUserInfo","AuthorityList"というキーで渡す
# -------------------------------------------------------------------
#
# AccessControl関連のパラメータ
#
# -------------------------------------------------------------------
# 権限判定の実装クラスがうけとるパラメータ
AccessControlSubstance.Parameter.LoginUserInfo=global:LoginUserInfo
AccessControlSubstance.Parameter.AuthorityList=global:AuthorityList



また、権限制御的ファイルでは個々のtargetタグやcheckpointタグの子タグとしてparameterタグを記述することで、 個々の判定処理用に個別のパラメータを追加で渡すことも出来ます。



権限制御対象

画面の初期化タイミングで権限判定を行う場合は、後述のtarget-listセクションに権限制御対象を記述します。 これにより、SVOStatementに対して権限制御を行うArea上の各要素を割り当てることになります。

この権限制御対象は一つのSVOStatementに対して複数個定義することができるので、同じ機能を実行する画面が2画面あれば、1ファイル中に権限制御対象を2つ定義します。
この権限制御対象に含まれる情報の詳細についてはtarget-listセクションを参照してください。

権限制御対象として指定できる画面の構成要素には以下の3種類があります。

GUIコンポーネント、メニュー項目を指定すると、権限が無い場合にそれらを無効化したり非表示にしたり出来ます。
ただし、一つのボタンやメニュー項目が、画面の処理状態によって異なる機能を持つ場合(ある状態だと「保存」だが、別の状態だと「明細保存」など)、この方法は使用できません。 この場合は、Area定義のCommandを権限制御対象として指定することになります。Commandを指定した場合、権限が無い場合はCommand実行がキャンセルされます。

GUIコンポーネント(ボタン等)

Area定義のcomponent-listセクションで指定された、画面上に配置されているボタンやリンク、アイコン等を権限制御対象として指定することができます。 この場合、type="component"と指定した上で、SVOStatementの機能を実行するトリガーとなるGUIコンポーネントのIDをcomponent属性で指定します。

このように指定された場合、画面の初期化タイミングで権限の判定が行われて、もし権限が無ければ指定されたGUIコンポーネントが無効化もしくは非表示になります。


メニュー項目(MenuBar,MenuButton,TreeMenu,PopupMenu等)

メニュー系のGUI部品内の各メニュー項目を権限制御対象として指定することが出来ます。MenuItemタグかつitem属性の指定が必須です。
この場合、type="menuitem"と指定した上で、SVOStatementの機能を実行するトリガーとなるメニュー項目の識別子(MenuItemタグのitem属性値)をmenuitem属性で指定します。

このように指定された場合、画面の初期化タイミングで権限の判定が行われて、もし権限が無ければ指定されたメニュー項目が無効化もしくは非表示になります。(TreeMenuでは非表示のみ)


Area定義のCommand

Area定義のcommand-listセクションで定義されているCommandを権限制御対象として指定することができます。 この場合、type="command"と指定した上で、SVOStatementの機能を実行するCommandのIDをcommand属性で指定します。

このように指定された場合、画面の初期化タイミングで権限の判定が行われて、もし権限がなければ該当Commandが呼び出されても実行がキャンセルされます。



権限チェックポイント

処理実行の都度に権限判定を行う場合は、後述のcheckpoint-listセクションに権限チェックポイントを記述します。 これにより、SVOStatementに対して権限チェックポイントを割り当てることになります。

このチェックポイントは一つのSVOStatementに対して複数個定義することができるので、同じ機能を実行する画面が2画面あれば、1ファイル中にチェックポイントを2つ定義します。
このチェックポイントに含まれる情報の詳細についてはcheckpoint-listセクションを参照してください。

権限チェックポイントとして指定できる画面の構成要素には以下の3種類があります。

GUIコンポーネント、キーバインドはユーザー操作そのものに直結させてチェックポイントを指定する形になります。
ただし、一つのボタンやキーバインドが、画面の処理状態によって異なる機能を持つ場合(ある状態だと「保存」だが、別の状態だと「明細保存」など)、この方法は使用できません。 この場合は、Area定義のCommandをチェックポイントとして指定することになります。

チェックポイントで権限が無いと判定された場合、メッセージダイアログ表示が行われて処理実行がキャンセルされます。

GUIコンポーネント(ボタン等)

Area定義のcomponent-listセクションで指定された、画面上に配置されているボタンやリンク、アイコン等をチェックポイントとして指定することができます。 この場合、type="component"と指定した上で、SVOStatementの機能を実行するトリガーとなるGUIコンポーネントのIDをcomponent属性で指定します。

このように指定された場合、ユーザーがチェックポイントになっているGUIコンポーネントを操作(クリック、押下など)したタイミングで実行権限チェック機能が呼び出されることになります。


キーバインド(ファンクションキー等)

Area定義のkey-bindingセクションで指定された、イベントを発行するファンクションキー等をチェックポイントとして指定することができます。 この場合、type="keybind"と指定した上で、SVOStatementの機能を実行するトリガーとなるバインドキーをkeybind属性で指定します。

このように指定された場合、ユーザーがチェックポイントになっているバインドキーを押下したタイミングで実行権限チェック機能が呼び出されることになります。


Area定義のCommand

Area定義のcommand-listセクションで定義されているCommandをチェックポイントとして指定することができます。 この場合、type="command"と指定した上で、SVOStatementの機能を実行するCommandのIDをcommand属性で指定します。

このように指定された場合、指定されたCommandが実行される直前のタイミングで実行権限チェック機能が呼び出されることになります。



AccessControl定義の内容

実行権限制御定義の内容に含まれる情報には、主に以下の物があります。

AccessControlの識別情報

権限チェック定義は、システム内でユニークに特定できる必要があります。
そのために、権限チェック定義自体を識別するためのIDや名称と、実行権限チェックを行う対象のSVOStatementを必ず指定する必要があります。

詳細はidentityセクションを参照してください。


SVOStatementに対する権限制御対象の一覧

SVOStatementの実行権限をチェックする制御対象をここで複数個定義することができます。
制御対象となる画面の構成要素および、画面初期化時の権限有無判定で呼び出される権限チェック機能の実体に対して渡すパラメータを指定します。

詳しくはtarget-listセクションを参照してください。


SVOStatementに対する権限チェックポイントの一覧

SVOStatementの実行権限をチェックするチェックポイントをここで複数個定義することができます。
チェックポイントとなる画面の構成要素および、そのチェックポイントで呼び出される権限チェック機能の実体に対して渡すパラメータを指定します。

詳しくはcheckpoint-listセクションを参照してください。



identityセクション

記述例 :

<identity id="CAC_ACPY_001"
          name="支払申請登録SVOStatement実行権限"
          dispName="支払申請登録SVOStatement実行権限"
          statement="ACPY_001"/>

説明 :
identityセクションは、実行権限制御定義の識別情報を記述するセクションです。
IDや名称を定義して、実行権限を制御する対象のSVOStatementを指定します。

属性値 :
identityタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
id システム内でユニークになる実行権限制御定義の識別ID 文字列 必須 不可
name 実行権限制御定義の名称。 文字列 非必須 不可
dispName 実行権限制御定義の表示名称。 文字列 非必須 不可
statement 実行権限を制御する対象のSVOStatementのID。
ここで指定されたIDは、実行権限制御の実体に渡されるパラメータの一つとなります。
文字列 必須 不可


descriptionセクション

記述例 :

<description>
    「支払申請を作成する」というSVOStatementの実行権限チェック定義です。
</description>

説明 :
descriptionセクションは、実行権限チェック定義の詳細説明を記述するセクションです。
フリーフォーマットで文章で記入してください。


target-listセクション

記述例 :

<!--==============================================
== Client Access Control CheckPoint List
================================================-->
<target-list>
    <target type="component" area="CA_ACPY_001" component="登録ボタン"/>
    <target type="component" area="CA_ACPY_001" component="申請ボタン" ifdenied="invisible"/>
    <target type="menuitem" area="CA_ACPY_001" component="メニューバー" menuitem="登録"/>
    <target type="command" area="CA_ACPY_001" command="登録">
        <parameter-list>
            <parameter key="ログイン会社情報" value="content:CA_ACPY_001_Edit/ログイン会社情報"/>
            <parameter key="ログインアプリケーション種別" value="content:CA_ACPY_001_Edit/ログインアプリケーション種別"/>
        </parameter-list>
    </target>
</target-list>

説明 :
target-listセクションは、SVOStatementに対する実行権限の制御対象を宣言するセクションです。
子要素として、個々の制御対象を表すtargetタグを列挙します。

セクション内の子要素 :
target-listセクションの子要素として、以下のタグがあります。

targetタグ

個々の権限制御対象を定義するためのタグです。必要な分を複数個列挙してください。

targetタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
type 実行権限の制御対象として扱う、Areaの構成要素のタイプです。以下のいずれかを指定します。
  • component : GUI部品に対する実行権限制御を行う場合
  • menuitem : メニュー項目(MenuItemタグ)に対する実行権限制御を行う場合
  • command : Area定義のCommand実行時にチェックを行う場合
component,
menuitem,
command
必須 不可
page 特定のPage上に配置された場合のみに限定したい場合にPageのIDを指定します。 ほとんどのケースでは必要はありません。 文字列 非必須 不可
area 実行権限の制御対象になる画面のAreaのIDを指定します。 文字列 必須 不可
component type属性がcomponentもしくはmenuitemの場合に、実行権限の制御対象になるGUIコンポーネントのIDを指定します。 文字列 type属性がcomponentもしくはmenuitemの場合に必須 不可
menuitem type="menuitem"の場合に、実行権限の制御対象になるMenuItemタグのitem属性値を指定します。 文字列 type="menuitem"の場合に必須 不可
copmmand type="command"の場合に、実行権限の制御対象になるCommandのIDを指定します。 文字列 type="command"の場合に必須 不可
ifdenied 権限有無の判定結果がfalseだった場合に、制御対象に対してどのような制御を行うかの指定です。 無効化する場合はdisable、非表示にする場合はinvisibleと指定します。
省略時はdisable扱いとなります。
disable,
invisible
非必須(省略時はdisable扱い) 不可

parameterタグ

targetタグの子要素としてとして、paramter-listおよびparamterタグがあります。
これは、PEXA実行エンジンからアダプタプラグインに対して渡すパラメータの定義です。 paramter-list配下に必要な分を複数個列挙してください。

paramterタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
key 権限チェック機能の実体に対して渡すパラメータ名(キー)を指定します。 文字列 必須 不可
value 権限チェック機能の実体に対して渡すパラメータの値を指定します。
基本的にはその画面のContentで定義されているContentItemを参照記法で指定します。
文字列 必須


checkpoint-listセクション

記述例 :

<!--==============================================
== Client Access Control CheckPoint List
================================================-->
<checkpoint-list>
    <checkpoint type="component" area="CA_ACPY_001" component="登録ボタン"/>
    <checkpoint type="keybind" area="CA_ACPY_001" keybind="F5"/>
    <checkpoint type="command" area="CA_ACPY_001" command="登録">
        <parameter-list>
            <parameter key="ログイン会社情報" value="content:CA_ACPY_001_Edit/ログイン会社情報"/>
            <parameter key="ログインアプリケーション種別" value="content:CA_ACPY_001_Edit/ログインアプリケーション種別"/>
        </parameter-list>
    </checkpoint>
</checkpoint-list>

説明 :
checkpoint-listセクションは、SVOStatementに対する実行権限チェックを行うチェックポイントを宣言するセクションです。
子要素として、個々のチェックポイントを表すcheckpointタグを列挙します。

セクション内の子要素 :
checkpoint-listセクションの子要素として、以下のタグがあります。

checkpointタグ

個々の権限チェックポイントを定義するためのタグです。必要な分を複数個列挙してください。

checkpointタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
type 実行権限のチェックポイントとして扱う、Areaの構成要素のタイプです。以下のいずれかを指定します。
  • component : イベントを発行するタイプのGUI部品をユーザーが操作した場合にチェックを行う場合
  • keybind : キーバインドでイベントを割り当てられたキーの押下時にチェックを行う場合
  • command : Area定義のCommand実行時にチェックを行う場合
component,
keybind,
command
必須 不可
page 特定のPage上に配置された場合のみに限定したい場合にPageのIDを指定します。 ほとんどのケースでは必要はありません。 文字列 非必須 不可
area 実行権限のチェックポイントになる画面のAreaのIDを指定します。 文字列 必須 不可
component type="component"の場合に、実行権限のチェックポイントになるGUIコンポーネントのIDを指定します。 文字列 type="component"の場合に必須 不可
keybind type="keybind"の場合に、実行権限のチェックポイントになるバインドキーを指定します。 文字列 type="keybind"の場合に必須 不可
copmmand type="command"の場合に、実行権限のチェックポイントになるCommandのIDを指定します。 文字列 type="command"の場合に必須 不可

parameterタグ

checkpointタグの子要素としてとして、paramter-listおよびparamterタグがあります。
これは、PEXA実行エンジンからアダプタプラグイン対して渡すパラメータの定義です。 paramter-list配下に必要な分を複数個列挙してください。

paramterタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
key 権限チェック機能の実体に対して渡すパラメータ名(キー)を指定します。 文字列 必須 不可
value 権限チェック機能の実体に対して渡すパラメータの値を指定します。
基本的にはその画面のContentで定義されているContentItemを参照記法で指定します。
文字列 必須


statusセクション

記述例 :

<status>
    <author>$Author: morishita $</author>
    <datetime>$Date:: 2010-10-08 16:52:32 #$</datetime>
    <version>$Revision: 5452 $</version>
</status>

説明 :
実行権限制御定義ファイルの編集情報を記述するセクションです。
バージョン管理システムの置換キーワードなどと連携して使用してください。

セクション内の子要素 : 以下の子要素があります。

authorタグ

タグの間にはさんで、ファイルの編集者を記述します。


datetimeタグ

タグの間にはさんで、ファイルの編集日時を記述します。


versionタグ

タグの間にはさんで、ファイルのバージョンを記述します。



AccessControl定義全体のサンプル

<?xml version="1.0" encoding="Windows-31J"?>
<!--
- Copyright
-->
<!DOCTYPE client-access-control SYSTEM "../doctype/client-access-control.dtd">
<!--==============================================================
== Current-Module:   $HeadURL: http://pexa.atrris.com/repos/trunk/doc/material/developGuide/client/xdocs/ja/pexa_client_definition_accesscontrol.xml $
== Release-Date:     $Date:: 2010-10-08 16:52:32 #$
== Release-Version:  $Revision: 5452 $
== First-Created-On: 2007/11/20
== First-Created-By: daisuke morishita
== Copy-Right-Owner:
==============================================================-->
<client-access-control>
    <!--==============================================
    == Client Access Control Identity Infomation
    ================================================-->
    <identity id="CAC_TEST_001"
              name="支払申請登録実行権限"
              dispName="支払申請登録実行権限"
              statement="ACPY_001"/>
    <!--==============================================
    == Client Access Control Description
    ================================================-->
    <description>
        支払申請の登録を行う実行権限定義です。
    </description>
    <!--==============================================
    == Control Target List
    ================================================-->
    <target-list>
        <target type="component" area="CA_TEST_ModelEdit" component="OKボタン" ifdenied="invisible"/>
        <target type="component" area="CA_TEST_ModelEdit" component="申請ボタン" ifdenied="disable"/>
        <target type="menuitem" area="CA_TEST_Table" component="テーブル" menuitem="メニュー1"/>
        <target type="menuitem" area="CA_TEST_Table" component="テーブル" menuitem="メニュー1-1" ifdenied="invisible"/>
        <target type="menuitem" area="CA_TEST_TreeMenu" component="ツリーメニュー" menuitem="表示フラグON"/>
        <target type="command" area="CA_TEST_ModelEdit" command="保存"/>
    </target-list>
    <!--==============================================
    == Check Point List
    ================================================-->
    <checkpoint-list>
        <checkpoint type="component" page="CP_TEST_ModelEdit" area="CA_TEST_ModelEdit" component="保存ボタン"/>
        <checkpoint type="keybind" page="CP_TEST_ModelEdit" area="CA_TEST_ModelEdit" keybind="ESCAPE"/>
        <checkpoint type="command" page="CP_TEST_ModelEdit" area="CA_TEST_ModelEdit" command="明細削除"/>
    </checkpoint-list>
    <!--==============================================
    == Client Access Control Update Infomation
    ================================================-->
    <status>
        <author>$Author: morishita $</author>
        <datetime>$Date:: 2010-10-08 16:52:32 #$</datetime>
        <version>$Revision: 5452 $</version>
    </status>
</client-access-control>


更新情報

  • 最終更新者 : $Author: morishita $
  • 最終更新日時 : $Date:: 2010-10-08 16:52:32 #$
  • バージョン : $Revision: 5452 $



Copyright © 2006, Atrris Corporation