プリンシパルの詳細
最終更新日: 2020年12月18日
R8 | R9
ご案内
ここではプリンシパルモデル(jprincipal)の詳細仕様について説明しています。
標準で用意されているプリンシパルの説明は認証・認可 > 権限管理の概要 > 標準のプリンシパルをご覧ください。
プリンシパルを追加したときに行うこと
開発者が追加したプリンシパルは、データベースに用意された "jprincipal" というテーブルに格納されます。このモデルは通常、外部から操作することはできませんが、テーブル情報としては存在しています。アカウント情報 (juser) のインポート・エクスポート時には、jprincipal も操作されます。
jprincipalの主キー(プリンシパルID)はビルドのタイミングで自動採番されます。("プリンシパル名(英語)" のソート順になります。)
外部データベース利用時は、ビルド後に import_db.bat を実行することで、追加したプリンシパルがアプリケーションに反映されます。 詳細は"サポート > データベース活用ガイド(R8) > テーブルの作成 >二回目以降"の手順をお読みください。
ワンポイント
内蔵データベース(HSQLDB)利用時は、この手順は自動的に行われます。
詳細な仕組み
「ログオンアカウントにプリンシパルを割り当てる」にあるように、アカウントには複数のプリンシパルを紐づけることができます。内部ではjuserは、複数のプリンシパルIDを保持します。

このように juser は jprincipal の ID 値を参照する仕組みですが、新たに jprincipal が追加された場合、juser がもっている ID 値に変更がないにもかかわらず、jprincipal の ID 値が降り直されるため、「ずれ」が生じる可能性があります。
そこで Wagby では、プリンシパルの追加に伴いプリンシパルIDが変わった場合でも、通常のアプリケーション入れ替えルール(エクスポートとインポート処理)を行うことで、整合性が維持されるようにしています。
- ビルド前のアプリケーションで、データをエクスポートしておきます。
- ビルド後のアプリケーションで、データをインポートします。インポート時に、インポート対象データのプリンシパル情報と、(ビルド後の)アプリケーションのプリンシパル情報を比較して、インポート対象データのアカウント(juser)のプリンシパルIDを自動的に変換します。
最小限の操作
この仕組みから、プリンシパルの追加時は、アカウントモデル(juser)のインポートを行うことで反映されます。具体的には次の操作になります。
- ビルド前のアプリケーションでアカウントモデル(juser)をエクスポートしておく。
- ビルド及びアプリケーションの入れ替えを行う。
- 新しいアプリケーションで 1. のアカウントモデル(juser)をインポートする。
3. のタイミングで、追加されたプリンシパルが自動的に反映されます。
プリンシパルの削除または名前の変更
上で説明したようにプリンシパルの追加はエクスポートとインポートによってプリンシパルIDのずれを吸収しますが、プリンシパルの削除もしくはプリンシパル名の変更は手動で対応する必要があります。
具体的にはアカウントモデル(juser)がもつプリンシパル情報をすべて消去し、新しくプリンシパルを再設定してください。
プリンシパルモデルの詳細
プリンシパルモデルは Wagby システム内部で管理されており、開発者がこの定義を変更することはできません。内部では次のようになっています。
R8.4.0以降
項目 | 型 | 説明 |
---|---|---|
id | 整数 | 順序による自動採番 |
principalId | 文字列 | 識別用の文字 |
content | 文字列 | 表示用の文字 |
category | 整数 | カテゴリID |
isShowInSelect | 真偽値 | 開発者による権限設定で選択肢として表示するかどうか |
isEditable | 真偽値 | プリンシパル設計画面で編集可能かどうか |
R8.3.xまで
項目 | 型 | 説明 |
---|---|---|
id | 整数 | 順序による自動採番 |
name | 文字列 | 識別用の文字 |
content | 文字列 | 表示用の文字 |
内部表現
プリンシパルをXML形式で表現すると次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<jprincipal id="1000">
<principalId>productmgr</principalId>
<content>{"en":"productmgr","ja":"商品管理者"}</content>
<category>7</category>
<isShowInSelect>true</isShowInSelect>
<isEditable>true</isEditable>
</jprincipal>
- id部は自動的に割り当てられます。
- content部は日本語と英語を含む国際化の特別表記形式となっています。詳細は "メッセージの変更・国際化 > 選択肢モデルの特別表記" をお読みください。8.1.2
- category部にはカテゴリIDが適用されます。
プリンシパルIDのルール8.4.2
システム系のプリンシパルのIDは1番から999番までとし、これは予約します。ユーザが独自に作成したプリンシパルIDは1000番から割り当てられます。なお、このプリンシパルIDは内部で自動採番されるものであり、開発者が通常、意識することはありません。