DBIPgSystem::DB のオブジェクトを生成する際、 ユーザ名を指定するようになっています。 DBIPgSystem::DB モジュールは、指定されたユーザ名を元に ユーザID (UID) を取得し、同時に sys_userinfo テーブルからユーザ情報を取得します。
UID は、データを追加/修正する際、 データの所有者を表すための ID としてデータのシステム定義カラムに格納されます。 また、アクセス権があるかどうかのチェックを行うときに利用されます。
ユーザ情報をコアで管理するために sys_userinfo テーブルが作られます。 このテーブルで定義されるカラムを次に示します。
カラム名 | データ型 | 説明 |
---|---|---|
system_uid | int4 | ユーザID |
system_read | text | 一般の読み込み時の絞り込み条件 |
system_add | text | 追加/修正時の絞り込み条件 |
system_delete | text | 削除時の絞り込み条件 |
system_detail | text | 詳細表示時の絞り込み条件 |
system_tofile | text | CSV/タブ区切りファイル出力時の絞り込み条件 |
system_state_active | text | 有効のデータのパーミッション |
system_state_wait | text | 申請中のデータのパーミッション |
system_state_invalid | text | 無効のデータのパーミッション |
sys_userinfo テーブルの内容は、主にアクセス制限のために使われます。 処理の対象となるデータが system_(read|add|delete), system_state_* のカラムに対応する値に マッチしていれば、その処理を行えます。 そうでないデータには、その処理を行えません。
データの状態に応じて system_state_*、 データに対する処理に応じて system_(read|add|delete) が使われます。 通常、大まかな設定を system_state_* で行い、 細かな設定を system_(read|add|delete) で行うとよいでしょう。
system_state_* は、状態が有効/申請中/無効のデータに対する アクセス権を表します。各値には、次の文字からなる文字列を記述してください。
例えば、値が 'RAD' ならば、 その状態のデータの全てについて自由にアクセスできます。 'r' ならば、ユーザIDの一致するデータに限って内容を表示させることができます。 null値や空文字列ならば、その状態のデータには全くアクセスできません。
system_state_invalid に A, D, a, d の文字を記述しても無視されます。 無効のデータの挿入や削除はできないからです。 また、system_state_* に R ( D ) が含まれていれば、 さらに r ( d ) を含める必要はありません。
system_(read|add|delete|detail|tofile) には、 SQLの WHERE句と同様の記述をしてください。 ただし、これらのカラムの値が null値や空文字列の場合は、 何も制限をかけていないものとみなされます。 主テーブルに対してのみ制限をかけられます。
詳細表示の際には、通常の読み込み(検索時など)の際よりも制限が厳しく、 system_read と system_detail の両方の制限を受けます。 例えば、どちらのカラムも空文字列でない場合は、 両方の条件を満たすデータのみアクセスできます。
CSV/タブ区切り表示の際には、詳細表示の際よりもさらに制限が厳しく、 system_read, system_detail system_tofile の制限されます。 例えば、どのカラムも空文字列でない場合は、 それらの全ての条件を満たすデータのみアクセスできます。
例えば、system_state_active = 'R', system_read = 'country = \'Japan\'' の場合、country が 'Japan' に等しい有効なデータの内容を 表示させることができます。
これらのアクセス制限の処理は、 DBIPgSystem::DB::check_permission メソッド で行われます。
以下に、それぞれの処理を行うために必要な条件を示します。
サンプル「履歴書」 のドキュメントやソースを参考にしてください。 このサンプルで、実際にアクセス制限を利用する例を紹介しています。