7.15. 認可チェック¶
目次
この機能では、アプリケーションが提供する機能に対して、認可チェックを行う。 この機能を使うことで、ウェブにおいてユーザごとに使用できる機能を制限する、 といったアクセス制御ができるようになる。
重要
本機能は、アプリケーションの要件が合致する場合に限り、使用すること。
本機能は、データベースを使用して認可チェックに使用する権限データを管理し、 リクエスト単位で権限を設定する( グループ単位とユーザ単位を併用した権限設定ができる に示した概念モデルを参照)。 例えば、ウェブの登録機能といった場合、初期表示/確認/戻る/登録といった複数リクエストで構成されるのが一般的である。
そのため、本機能は、細かく権限を設定できる反面、非常に細かいデータ設計が必要となり、 開発時の生産性低下やリリース後の運用負荷が高まる可能性がある。
7.15.1. 機能概要¶
7.15.1.2. グループ単位とユーザ単位を併用した権限設定ができる¶
認可チェックに使う権限設定の概念モデルは以下となる。

グループは、部署など、組織単位での権限割り当てに使用する。
認可チェック単位は、複数のリクエストをまとめ、認可チェックの最小単位を表す。 認可チェック単位には、認可チェックを実現するために必要なリクエスト、つまり、ウェブであれば画面のイベントが複数紐付く。 例えば、ユーザ登録機能であれば、以下のようなデータとなる。
- 認可チェック単位
- ユーザ登録
- 認可チェック単位「ユーザ登録」に紐付くリクエスト
- 入力画面の初期表示入力画面の確認ボタン確認画面の登録ボタン確認画面の戻るボタン
グループとユーザ、グループと認可チェック単位の関連を設定することで、グループ単位の権限を設定することができる。 さらに、ユーザに直接認可チェック単位を設定することもできるため、特定ユーザに対するイレギュラーな権限付与に対応することができる。
7.15.2. モジュール一覧¶
<dependency>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-common-auth</artifactId>
</dependency>
<dependency>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-common-auth-jdbc</artifactId>
</dependency>
7.15.3. 使用方法¶
7.15.3.1. 認可チェックを使うための設定を行う¶
この機能では、データベースを使用して認可チェックに使う権限データを管理する。 テーブルのレイアウトは以下となる。
- グループ
グループID(PK) グループを識別するための値。文字列型 - システムアカウント
ユーザID(PK) ユーザを識別するための値。文字列型 ユーザIDロック状態 ユーザIDのロック状態。文字列型。 有効日(From) ユーザの有効日(From)。文字列型。 有効日(To) ユーザの有効日(To)。文字列型。 ユーザIDロック状態: ロックされていない場合は”0”、ロックされた場合は”0”以外 有効日(From): yyyyMMdd形式で、指定しない場合は”19000101” 有効日(To): yyyyMMdd形式で、指定しない場合は”99991231” - グループシステムアカウント
グループID(PK) グループを識別するための値。文字列型 ユーザID(PK) ユーザを識別するための値。文字列型 有効日(From)(PK) ユーザの有効日(From)。文字列型 有効日(To) ユーザの有効日(To)。文字列型 有効日(From): yyyyMMdd形式で、指定しない場合は”19000101” 有効日(To): yyyyMMdd形式で、指定しない場合は”99991231” - 認可チェック単位
認可チェック単位ID(PK) 認可チェック単位を識別するための値。文字列型 - 認可チェック単位リクエスト
認可チェック単位ID(PK) 認可チェック単位を識別するための値。文字列型 リクエストID(PK) リクエストを識別するための値。文字列型 - グループ権限
グループID(PK) グループを識別するための値。文字列型 認可チェック単位ID(PK) 認可チェック単位を識別するための値。文字列型 - システムアカウント権限
ユーザID(PK) ユーザを識別するための値。文字列型 認可チェック単位ID(PK) 認可チェック単位を識別するための値。文字列型
認可チェックを使うためには、以下の設定を行う。
- BasicPermissionFactory の設定をコンポーネント定義に追加する。
- BasicPermissionFactory は、 認可チェックハンドラ に設定して使うので、コンポーネント名は任意の名前を指定する。
<component name="permissionFactory" class="nablarch.common.permission.BasicPermissionFactory">
<!-- グループスキーマ -->
<property name="groupTableSchema">
<component class="nablarch.common.permission.schema.GroupTableSchema">
<!-- プロパティへの設定は省略 -->
</component>
</property>
<!-- システムアカウントスキーマ -->
<property name="systemAccountTableSchema">
<component class="nablarch.common.permission.schema.SystemAccountTableSchema">
<!-- プロパティへの設定は省略 -->
</component>
</property>
<!-- グループシステムアカウントスキーマ -->
<property name="groupSystemAccountTableSchema">
<component class="nablarch.common.permission.schema.GroupSystemAccountTableSchema">
<!-- プロパティへの設定は省略 -->
</component>
</property>
<!-- 認可チェック単位スキーマ -->
<property name="permissionUnitTableSchema">
<component class="nablarch.common.permission.schema.PermissionUnitTableSchema">
<!-- プロパティへの設定は省略 -->
</component>
</property>
<!-- 認可チェック単位リクエストスキーマ -->
<property name="permissionUnitRequestTableSchema">
<component class="nablarch.common.permission.schema.PermissionUnitRequestTableSchema">
<!-- プロパティへの設定は省略 -->
</component>
</property>
<!-- グループ権限スキーマ -->
<property name="groupAuthorityTableSchema">
<component class="nablarch.common.permission.schema.GroupAuthorityTableSchema">
<!-- プロパティへの設定は省略 -->
</component>
</property>
<!-- システムアカウント権限スキーマ -->
<property name="systemAccountAuthorityTableSchema">
<component class="nablarch.common.permission.schema.SystemAccountAuthorityTableSchema">
<!-- プロパティへの設定は省略 -->
</component>
</property>
<!-- データベースアクセスに使用するトランザクションマネージャ -->
<property name="dbManager" ref="permissionCheckDbManager"/>
<!-- 有効日(FROM/TO)の判定に使用する業務日付を提供するプロバイダ -->
<property name="businessDateProvider" ref="businessDateProvider" />
</component>
BasicPermissionFactory は、 初期化が必要なので、以下のコンポーネント定義も追加する。
<component name="initializer"
class="nablarch.core.repository.initialization.BasicApplicationInitializer">
<property name="initializeList">
<list>
<!-- BasicPermissionFactoryを初期化する -->
<component-ref name="permissionFactory" />
</list>
</property>
</component>
7.15.3.2. サーバサイドで認可チェックを行う¶
認可チェックは、 Permission を使用する。 認可チェックハンドラ により、スレッドコンテキストに Permission が設定されているので、 PermissionUtil.getPermission を使って取得する。
Permission permission = PermissionUtil.getPermission();
if (permission.permit("/action/user/unlock")) {
// 認可チェックがOKの場合の処理がここにくる
}
7.15.3.3. 権限に応じて画面表示を制御する¶
権限の有無でボタンやリンクの非表示(非活性)を制御したい場合は、カスタムタグを使用する。 認可チェック/サービス提供可否に応じてボタン/リンクの表示/非表示を切り替える を参照。
7.15.3.4. 権限データにアクセスする¶
アプリケーションの要件によっては、特定グループに属するユーザ一覧を取得するといった、 権限データにアクセスしたい場合がある。 しかし、本機能では、認可チェックを行う機能しか提供していない。
そのため、権限データにアクセスしたい場合は、 ユニバーサルDAO を使用し、 SQLを作成することで対応する。
7.15.4. 拡張例¶
なし。