プリンシパルの詳細

最終更新日: 2023年12月25日
R8 | R9

ご案内

ここではプリンシパルモデル(jprincipal)の詳細仕様について説明しています。
標準で用意されているプリンシパルの説明は認証・認可 > 権限管理の概要 > 標準のプリンシパルをご覧ください。

プリンシパルを追加したときに行うこと

開発者が追加したプリンシパルは、データベースに用意された "jprincipal" というテーブルに格納されます。このモデルは通常、外部から操作することはできませんが、テーブル情報としては存在しています。アカウント情報 (juser) のインポート・エクスポート時には、jprincipal も操作されます。

jprincipalの主キー(id)はビルドのタイミングで自動採番されます。("プリンシパルID" のソート順になります。)

外部データベース利用時は、ビルド後に import_db.bat を実行することで、追加したプリンシパルがアプリケーションに反映されます。 詳細は"サポート > データベース活用ガイド(R9) > テーブルの作成 >二回目以降"の手順をお読みください。

ワンポイント

内蔵データベース(HSQLDB)利用時は、この手順は自動的に行われます。

詳細な仕組み

ログオンアカウントにプリンシパルを割り当てる」にあるように、アカウントには複数のプリンシパルを紐づけることができます。内部ではjuserは、複数のプリンシパルのid値(数字)を保持します。

図1 juserとjprincipalの関係

このように juser は jprincipal の id 値を参照する仕組みですが、新たに jprincipal が追加された場合、juser がもっている id 値に変更がないにもかかわらず、jprincipal の id 値が降り直される可能性があるため、「ずれ」が生じることがあります。

そこで Wagby では、プリンシパルの追加に伴いプリンシパルの id 値が変わった場合でも、通常のアプリケーション入れ替えルール(エクスポートとインポート処理)を行うことで、整合性が維持されるようにしています。

  1. ビルド前のアプリケーションで、データをエクスポートしておきます。
  2. ビルド後のアプリケーションで、データをインポートします。インポート時に、インポート対象データのプリンシパル情報と、(ビルド後の)アプリケーションのプリンシパル情報を比較して、インポート対象データのアカウント(juser)のプリンシパルの id 値を自動的に変換します。

最小限の操作

この仕組みから、プリンシパルの追加時は、アカウントモデル(juser)のインポートを行うことで反映されます。具体的には次の操作になります。

  1. ビルド前のアプリケーションでアカウントモデル(juser)をエクスポートしておく。
  2. ビルド及びアプリケーションの入れ替えを行う。
  3. 新しいアプリケーションで 1. のアカウントモデル(juser)をインポートする。

3. のタイミングで、追加されたプリンシパルが自動的に反映されます。

import_db.bat を使って juser のみのインポートを行うことはできません。juser のみを対象とするインポートは、ビルド後の Wagby アプリケーションを使うことができます。システム管理者で Wagby アプリケーションにログオンし、"管理処理 > インポートとエクスポート" 画面から "アカウント" のみにチェックをつけインポート処理を行うことができます。このとき juser と jprincipal テーブルのインポートが行われ、プリンシパルの id 値が再セットされます。

プリンシパルの削除または名前の変更

上で説明したようにプリンシパルの追加はエクスポートとインポートによってプリンシパルの id 値のずれを吸収しますが、プリンシパルの削除もしくはプリンシパルIDの変更は手動で対応する必要があります。

具体的にはアカウントモデル(juser)がもつプリンシパル情報をすべて消去し、新しくプリンシパルを再設定してください。

プリンシパルIDの変更は、このように影響が大きいものとなります。プリンシパルの追加は可能ですが削除や変更は避ける運用を行なってください。

プリンシパルモデルの詳細

プリンシパルモデルは Wagby システム内部で管理されており、開発者がこの定義を変更することはできません。内部では次のようになっています。

項目説明
id整数主キー。内部で自動採番される。
principalId文字列プリンシパルIDと呼ぶ、識別用の文字。英数字で表記する。
content文字列画面に表示されるの文字(日英の指定を行える)。
category整数カテゴリID。
isShowInSelect真偽値開発者による権限設定で選択肢として表示するかどうか。
isEditable真偽値プリンシパル設計画面で編集可能かどうか。

内部表現

プリンシパルを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値のルール

1番から999番までのプリンシパルのID値は予約されています。ユーザが独自に作成したプリンシパルのID値は1000番から自動的に割り当てられます。