# 簡易的なパスワードロック

トレーニング > 応用編 > セキュリティ機能 > # 簡易的なパスワードロック |

ここでは、パスワードダイアログの利用による簡易的な保護機能の実装について学習します。

パスワードダイアログの利用

ここでは、常時無効状態になっているボタンを、パスワードダイアログから正しいパスワードが入力された時に有効に切り替える画面を作成してみます（この学習では、Panel Browserのみを使用します）。

1.Panel Editorからパスワードダイアログ用にフォームを作成します。
新規フォームを追加し、名前を“PasswordSample”に変更してください。
フォームの名称を変更したら、ルートプロパティのDefaultFormプロパティを、“PasswordSample”に変更してください。
続けてログインの各プロパティを以下に変更します。ここでは、"admin"で自動ログインするように設定します。

プロパティ | 設定内容
PSLoginMust | “False”
PSLoginStartup | “AUTO”
PSLoginUser | admin
PSLoginPwd | adm

2.フォームにボタンを貼り付ける
PasswordSampleフォーム上に、以下のようなイメージでボタンを５つ貼り付けます。
ボタン1、ボタン2、ボタン3はEnabledプロパティをFalseに設定します。また、ボタン1-3には、「btn1」「btn2」「btn3」をそれぞれNameプロパティに設定します。

3.ボタン有効化のスクリプト記述
このボタンのクリック時にパスワードダイアログを表示し、パスワードが正しい時のみ各ボタンを有効にします。ボタン有効化ボタンのOnMouseUpイベントに、以下のスクリプトを記述してください。

event OnMouseUp(button) { if (parent.btn1.Enabled == F ) { ::OpenPassword(this, "pass", "inputagain"); } }

| （解説） パスワードダイアログの呼び出しは、OpenPasswordメソッドによって行います。ここで、第二引数に指定している文字列（この例では“pass”）が、パスワードの実体になります。第三引数で“inputagain”と指定すると、誤ったパスワードが入力された時にダイアログを再表示してパスワードの再入力を促す動作となります。 “parent.Btn1.Enabled == F”のif文比較は、ターゲットのボタンが無効の時のみパスワードダイアログを表示したい為の記述です。

次に、ボタン有効化ボタンのOnCommonEventイベントに、以下のスクリプトを記述してください。

event OnCommonEvent(name,value) { if (value && name == "RCPassword") { parent.btn1.Enabled = T; parent.btn2.Enabled = T; parent.btn3.Enabled = T; } }

| （解説） パスワードダイアログのみならず、共通ダイアログの処理結果はOnCommonEventに渡されます。パスワードダイアログによって発生したイベントかどうかは、nameパラメータの内容が“RCPassword”かどうかで判断します。又、正しいパスワードが入力された場合、valueパラメータにTrueが渡されます。 従って上記の処理は、正しいパスワードが入力された時のみ各ボタンのEnabledにTrueがセットされることになります。

次に、無効化ボタンのOnMouseUpイベントに、以下のスクリプトを記述してください。

event OnMouseUp(button) { parent.btn1.Enabled = F; parent.btn2.Enabled = F; parent.btn3.Enabled = F; }

以上で画面の作成は完了です。設定ファイルを保存してください。

| パスワードダイアログのパスワードは、大文字・小文字を区別します。

動作確認

作成した簡易パスワードロックの動作を確認してみます。Panel Serverがオンライン状態で確認して下さい。

1.Panel Editorの下図のアイコンをクリックすると、Panel Browserが起動し、クライアント設定ファイルが開かれて実行されます。
初期状態では、ボタン1，2，3が無効の状態です。

2.ボタン有効化をクリックして下さい。
パスワードダイアログが表示されました。まずは誤ったパスワードを入力してみて下さい。
誤ったパスワードが入力されると、上図のようなエラーメッセージが表示されます。“inputagain”を指定しているため、パスワードダイアログは表示されたままの状態です。
続いて、正しいパスワードである「pass」と入力して下さい。
各ボタンが有効状態になりました

3.次に、ボタン無効化をクリックしてください。
各ボタンが無効状態に戻りました
このような実装パターンは、例えば設備の運転パラメータの編集時など、保護を掛けたいボタンの操作時にパスワードの入力を求め、ひととおりの操作が終了した後でボタンを無効に戻したい、といった場面で効果的な手法です。