プリンシパルの詳細
最終更新日: 2023年12月25日
R8 | R9
ご案内
ここではプリンシパルモデル(jprincipal)の詳細仕様について説明しています。
標準で用意されているプリンシパルの説明は認証・認可 > 権限管理の概要 > 標準のプリンシパルをご覧ください。
プリンシパルを追加したときに行うこと
開発者が追加したプリンシパルは、データベースに用意された "jprincipal" というテーブルに格納されます。このモデルは通常、外部から操作することはできませんが、テーブル情報としては存在しています。アカウント情報 (juser) のインポート・エクスポート時には、jprincipal も操作されます。
jprincipalの主キー(id)はビルドのタイミングで自動採番されます。("プリンシパル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 値のずれを吸収しますが、プリンシパルの削除もしくはプリンシパルIDの変更は手動で対応する必要があります。
具体的にはアカウントモデル(juser)がもつプリンシパル情報をすべて消去し、新しくプリンシパルを再設定してください。
プリンシパルモデルの詳細
プリンシパルモデルは Wagby システム内部で管理されており、開発者がこの定義を変更することはできません。内部では次のようになっています。
R8.4.0以降
項目 | 型 | 説明 |
---|---|---|
id | 整数 | 主キー。内部で自動採番される。 |
principalId | 文字列 | プリンシパルIDと呼ぶ、識別用の文字。英数字で表記する。 |
content | 文字列 | 表示用の文字 |
category | 整数 | カテゴリID |
isShowInSelect | 真偽値 | 開発者による権限設定で選択肢として表示するかどうか |
isEditable | 真偽値 | プリンシパル設計画面で編集可能かどうか |
R8.3.xまで
項目 | 型 | 説明 |
---|---|---|
id | 整数 | 主キー。内部で自動採番される。 |
name | 文字列 | 識別用の文字 |
content | 文字列 | 表示用の文字 |
内部表現
プリンシパルをXML形式で表現すると次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<jprincipal id="1000">
<principalId>P000001</principalId>
<content>{"en":"productmgr","ja":"商品管理者"}</content>
<category>7</category>
<isShowInSelect>true</isShowInSelect>
<isEditable>true</isEditable>
</jprincipal>
- id部は自動的に割り当てられます。
- プリンシパルIDは任意の英数字で表記してください。重複してはなりません。一度決定したプリンシパルIDは削除、変更しないようにしてください。
- content部は日本語と英語を含む国際化の特別表記形式となっています。詳細は "メッセージの変更・国際化 > 選択肢モデルの特別表記" をお読みください。8.1.2
- category部にはカテゴリIDが適用されます。
プリンシパルIDのルール8.4.2
1番から999番までのプリンシパルのID値は予約されています。ユーザが独自に作成したプリンシパルのID値は1000番から自動的に割り当てられます。