隱藏使用者無法執行的動作

綱目設計者可以隱藏使用者無權執行的動作。
綱目中的動作可能會顯示在 ClearQuest® 中,即便使用者無權執行所有動作亦然。綱目設計者可以隱藏動作存取控制連結鉤所控制的動作。對使用者隱藏的動作不會顯示在 ClearQuest Client 的「修改」、「變更狀態」或「公用程式」功能表中。是否隱藏動作是由存取控制中所指定的值來決定。

隱藏 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,可能會影響記錄表單顯示效能。將執行記錄上所有動作的存取控制連結鉤,以決定是否應該對使用者顯示動作。如果綱目具有大量的動作,或如果存取控制連結鉤 Script 處理緩慢,則在緩慢載入時,使用者可能會看到記錄表單。

ratl_GetLegalAction 階段作業變數

HIDE_ACTIONS 綱目內容設為 1 來隱藏動作,且存取控制設為 SCRIPTS 時,可以呼叫存取控制連結鉤,以決定是否應該在 ClearQuest Client 的功能表中,對使用者隱藏動作名稱,或檢查是否容許使用者執行動作。綱目設計者可以自訂連結鉤,以檢查 ratl_GetLegalAction 階段作業變數的值,此值可指出呼叫連結鉤的原因。
  • 如果 ratl_GetLegalAction 的值符合現行記錄的顯示名稱,則將呼叫連結鉤,以決定是否應該隱藏動作。如果應該隱藏動作名稱,則連結鉤會傳回 0 值。如果應該顯示動作名稱,則連結鉤會傳回 1 值。
  • 如果 ratl_GetLegalAction 的值不符合現行記錄的顯示名稱,則將呼叫連結鉤,以決定是否容許使用者執行此動作。如果存取控制連結鉤傳回 1 值,表示已選取此動作,並且將執行它。即使在 ClearQuest Client 功能表中,對此使用者隱藏動作名稱,巢狀連結鉤或外部 Script 還是能呼叫此動作。如果動作存取控制連結鉤傳回 0,ClearQuest Client 將顯示不容許此動作的一般錯誤訊息。或者,連結鉤可以藉由將資訊傳遞至 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 頻道,以進一步瞭解隱藏動作。


意見