<< Click to Display Table of Contents >> マニュアル > 監視システム構築ガイド > プロジェクトの作成 > 独自プロジェクトの作成 > 独自プロジェクトのユーザー管理(ログイン) > 機能解説 > スクリプトから権限設定を取得する |
ユーザの権限設定について
ユーザ情報には、権限設定を定義することができます。権限設定の定義は、ユーザ情報を登録する以下のダイアログで行います。
ログインが行われると、権限設定に設定されている設定値が、PSUserAuthルートプロパティに文字列としてそのまま格納されます。
スクリプトなどからPSUserAuthルートプロパティをそのまま文字列として参照して利用することもできますが、権限設定から全権限のマップ値を生成することで権限値を簡単に取得できるようにする方法が用意されています。
以下に、2つの実装例を紹介します。
•例1)権限設定の文字列をそのまま取得する
•例2)権限設定から全権限のマップ値を生成して利用する
例1)権限設定の文字列をそのまま取得する
スクリプトからPSUserLevelを参照して権限設定の文字列を取得する簡単な例を紹介します。
ここでは例として、以下のユーザ情報が登録されているものとします。
ユーザ名 |
権限設定 |
admin |
123 |
senior |
456 |
operator |
789 |
guest |
321 |
(ユーザ設定ダイアログの設定例)
■スクリプトの実装例
1.画面にボタンを1つ配置します。
2.ボタンのスクリプトページを開き、OnMouseUpイベントを追加します。
3.スクリプトを記述します。
ここでは例として、PSUserAuthルートプロパティの内容をメッセージボックスで表示してみます。
(記述内容)
event OnMouseUp(button) { ::OpenMsg(::PSUserAuth); } |
4.動作確認
プロジェクトを実行し、adminユーザでログインしてください。
上記のボタンをクリックすると、adminユーザの権限設定に設定されている「123」が表示されます。
続いて、seniorユーザでログインして同様にボタンをクリックすると、seniorユーザの権限設定に設定されている「456」が表示されます。
このように、カスタム権限として登録した権限情報は、スクリプトからPSUserAuthルートプロパティを参照することで簡単に取得することができます。
取得した文字列を基に、権限値に応じた処理を実装することができます。
但し、上記の方法は権限情報を1つの文字列として取得するため、権限情報に複数の属性を含めて定義したいような場面では、文字列の並びを意識して独自にパースする必要が生じる等、処理が煩雑なものとなります。また、例えば、複数の属性を単なるカンマ区切りなどで列挙して定義した場合、属性の追加、削除、順序の変更などが生じた都度、コードを修正する必要が生じてしまいます。
そこで、次に紹介する例2では、権限情報のマップ値を生成してシステムに登録し、GetAuthルートメソッドで簡単に取得できるようにするための方法を説明します。
例2)権限設定から全権限のマップ値を生成して利用する
この例では、マップ書式で定義された権限設定をPSUserLevelルートプロパティを介して受け取り、全権限のマップ値を生成して利用するための実装例を紹介します。
ここでは例として、以下のユーザ情報が登録されているものとします。
ユーザ名 |
権限設定 |
admin |
key1:123;key2:abc |
senior |
key1:456;key2:def |
operator |
key1:789;key2:ghi |
guest |
key1:321;key2:cba |
尚、上記の権限設定の定義書式を「マップ書式」と呼びます。マップ書式は以下のルールで記述します。
(マップ書式)
•権限キーと権限値を半角コロン「:」で区切って定義する。
•複数定義する場合は半角セミコロン「;」で区切って列挙する。
例)key1:123;key2:abc
■スクリプトの実装例
1.ルートのスクリプトページを開き、OnLoginイベントを追加します。
2.OnLoginイベントに以下のようなスクリプトを記述します。
(記述内容)
event OnLogin(login,level,bFirstLogin) { if(login){ var vAuthMap = ::MAPSTRTO(::CStrToArray(::PSUserAuth, ";"), "KEY:STRING"); ::SetAuthMap(vAuthMap); } } |
(解説)
OnLoginイベントは、ログインが行われる都度発生するイベントです。ログインが行われると引数「login」にTrueが渡ってきます。従って、本イベント内に処理を記述することで、ログインが発生する都度、上記の処理が自動的に呼び出される動作となります。尚、PSUserAuthルートプロパティは、ログインが行われる都度、当該ユーザに定義されている権限設定が文字列で格納されます。
処理のポイントとしては、まず、PSUserAuthプロパティに格納されたマップ書式(「key1:123;key2:abc」など)に対して、CStrToArrayメソッドを用いてセミコロン「;」をセパレータとしてマップ文字列の配列に変換し、MAPSTRTOメソッドに渡しています。これにより、ユーザ権限の権限キーと値で構成されたマップ値が生成され、vAuthMap変数に一旦格納されます。次に、SetAuthMapメソッドに左記のマップ値を渡すことで、全権限のマップ値がシステムにセットされます。システムにセットされた全権限のマップ値は、GetAuthメソッドでアクセスして利用することができるようになります。
3.続いて、フォームにボタンを1つ配置します。
4.このボタンには、権限キー「key1」の値を取得する処理を記述します。ボタンのスクリプトページを開き、OnMouseUpイベントを追加します。
OnMouseUpイベントに、GetAuthメソッドでkey1の値を取得して画面に表示する処理を記述します。
(記述内容)
event OnMouseUp(button) { var vVal;
vVal = ::GetAuth("key1"); ::OpenMsg(vVal); } |
5.同様の手順で、権限キー「key2」を取得するボタンを作成します。もう一つボタンを配置し、スクリプトページからOnMouseUpイベントを追加します。
OnMouseUpイベントに、GetAuthメソッドでkey2の値を取得して画面に表示する処理を記述します。
(記述内容)
event OnMouseUp(button) { var vVal;
vVal = ::GetAuth("key2"); ::OpenMsg(vVal); } |
6.動作確認
プロジェクトを実行し、adminユーザでログインしてください。
key1を取得するボタンをクリックすると、adminユーザの権限キー「key1」に設定されている値「123」が表示されます。
(adminの「key1」)
key2を取得するボタンをクリックすると、adminユーザの権限キー「key2」に設定されている値「abc」が表示されます。
(adminの「key2」)
続いて、seniorユーザでログインして同様にボタンをクリックし、key1は「456」、key2は「def」が表示される事を確認してください。
(seniorの「key1」)
(seniorの「key2」)
このように、権限設定をマップ書式で定義しておき、SetAuthMapルートメソッドで全権限のマップ値をシステムにセットする事により、GetAuthメソッドで権限キーを指定して権限値を取得することができるようになります。