ユーザーが実行できないアクションの非表示

スキーマ デザイナは、アクションを実行する権限を持たないユーザーに対して、アクションを非表示にできます。
ユーザーが一部のアクションを実行する権限を持っていない場合でも、スキーマ内のアクションは ClearQuest® に表示されます。スキーマ デザイナは、アクション アクセス制御フックによって制御されるアクションを非表示にできます。ユーザーに対して非表示のアクションは、ClearQuest クライアントの「Modify」、「Change State」、「Utilities」のメニューに表示されません。 アクションが非表示になるかどうかは、[Access Control] に指定された値によって決まります。

SCRIPTS アクセス制御の非表示アクション: HIDE_ACTIONS スキーマ プロパティ

まず最初に、アクションを非表示にするためには、スキーマを有効にする必要があります。 packageutil コマンドを実行して、HIDE_ACTIONS スキーマ プロパティを 1 に設定します。HIDE_ACTIONS スキーマ プロパティは、最新バージョンのスキーマに設定されます。コマンドの形式は以下のとおりです。

packageutil setproperty –dbset <dbset> <user> <password> <schema> HIDE_ACTIONS 1

アクションを非表示にする機能を無効にするには、HIDE_ACTIONS スキーマ プロパティを 0 に設定します。
注: レコード フォームの表示性能は、HIDE_ACTIONS セッション変数値を 1 に設定すると影響を受ける場合があります。そのユーザーに対してアクションを表示するかどうかを判別するためには、レコードのすべてのアクションに対するアクセス制御フックが実行されます。スキーマに多数のアクションがある場合、またはアクセス制御フックのスクリプトの処理が低速の場合、レコード フォームのロードがユーザーにとっては遅く感じられる場合があります。

ratl_GetLegalAction セッション変数

HIDE_ACTIONS スキーマ プロパティがアクションを非表示にするため 1 に設定され、[Access Control][SCRIPTS] に設定されている場合、アクセス制御フックを呼び出すことで、ClearQuest クライアントのメニュー内のユーザーに対してそのアクション名を非表示にするかどうかを判別したり、あるいは、ユーザーがアクションの実行を許可されているかどうかを確認することができます。 スキーマ デザイナは、カスタマイズしたフックによって、フックが呼び出されている理由を示す ratl_GetLegalAction セッション変数の値を確認することができます。
  • ratl_GetLegalAction の値が、現行レコードの表示名と一致する場合、フックは、アクションを非表示にするかどうか判別するために呼び出されています。アクション名を非表示にする必要がある場合、フックは 0 の値を戻します。 アクション名を表示する必要がある場合、フックは 1 の値を戻します。
  • ratl_GetLegalAction の値が、現行レコードの表示名と一致しない場合、フックは、このアクションをユーザーが実行できるかどうか判別するために呼び出されています。アクションはすでに選択済みのため、アクセス制御フックが 1 の値を戻す場合は実行されます。ClearQuest クライアント メニューでこのユーザーに対してアクション名が非表示だった場合でも、アクションはネストされたフックまたは外部スクリプトにより起動することができます。 ClearQuest クライアントは、アクション アクセス制御フックが 0 を戻す場合、このアクションが許可されていないことを示す一般的なエラー メッセージを表示します。あるいは、情報を Perl の die() 関数や VBScript Err.Raise() メソッドに渡すことで、フックがより詳しいエラー メッセージを表示することができます。 メッセージには、一致しない前提条件や、アクションを実行する権限をユーザーが持っていない理由についての情報が記載されています。

以下の Perl の例は、アクションを非表示にするかどうかを判別するためにフックをカスタマイズする方法を示します。 このタイプのアクセス制御フックは VBScript を使用しても作成することができます。
    # Start User Code
    # Set $result to 1 if the user has permission to perform
    # this action, otherwise set it to 0.

    $result = 0;

    if ($session->IsUserSuperUser()) {
        # A super user can always do this action.
        $result = 1;
    }
    else {
        my $GLA = $session->GetNameValue("ratl_GetLegalAction");
        my $myName = $entity->GetDisplayName();
        if ($GLA eq $myName) {
            # This hook was called for hide action.
            # To hide the action, return 0 by uncommenting the following line
            # $result = 0
            # and then delete or comment out the $result = 1 below
            #
            # Or, to always show the action so the user will see 
            # a detailed message if they try to run it. 
            $result = 1;
        }
        else {
            my $user  = $session->GetUserLoginName();
            my $owner = $entity->GetFieldStringValue("Owner");
            if ($user ne $owner) {
                die "Only the owner can perform this action."; 
            }
            $result = 1;
        }
    }
    # End User Code    

IBM®Rational® Support YouTube チャネルにアクセスして、アクションの非表示に関する詳細を確認してください。


フィードバック