定制ClearQuest以通過所有者、角色或組來分隔記錄

發表于:2007-09-24來源:作者:點擊數: 標簽:clearquest
當許多不同的用戶共享ClearQuest中的一個缺陷 數據庫 時,管理員可能需要確保只有記錄的所有者可以修改他或她自己的記錄。本文提供了完成此方法的一個詳細的過程。 考慮一下以下情形:在一個缺陷數據庫中有許多用戶。這些用戶可能來自許多不同項目的不同團隊
 

當許多不同的用戶共享ClearQuest中的一個缺陷數據庫時,管理員可能需要確保只有記錄的所有者可以修改他或她自己的記錄。本文提供了完成此方法的一個詳細的過程。

考慮一下以下情形:在一個缺陷數據庫中有許多用戶。這些用戶可能來自許多不同項目的不同團隊。為了避免混亂和系統中的不可預期的操作,IBM Rational ClearQuest管理員可能需要分隔每個用戶的記錄,因而只有記錄的擁有者可以查看和修改他或她自己的記錄。如果我們按照項目來分類這些用戶,那么從一個個項目的觀點來看,缺陷數據庫對每個用戶和每個項目看起來都是唯一的。

本文闡明了一個ClearQuest管理員可以如何通過提交者來分隔缺陷記錄。本文提供了定制數據庫過程的一步步的細節內容,并且包括一些如何對某些字段控制訪問權限的鉤子函數。

介紹
ClearQuest是軟件
開發中變更管理的一個強有力的工具。它是高度可定制的,使用戶能夠靈活地控制他們的不同變更管理過程。ClearQuest也提供一些預定義的模板,它們從一些變更管理的最佳實踐開始,將逐步地帶領你領略此工具的微妙之處,

舉例來說,當你應用其中一個標準模板來管理你的變更管理過程時,所有的團隊成員缺省可以查詢數據庫中的所有記錄。這可能會引起你的團隊的混亂,或者可能會導致某些不可預期或不爭取的操作--特別是當你在一個數據庫中有多個項目時。你可能想通過所有者、項目、角色或組來分隔這些記錄。ClearQuest提供了一個稱為Security Context的機制,來幫助你達成此目標。

在我的例子中,我使用TestStudio作為模板,并解釋了如何定制此模板,來按照提交者來分隔缺陷記錄。通常的步驟如下:

  1. 定義你的隔離方針,然后創建適當的組。
  2. 創建一個security context記錄類型。
  3. 修改你想要進行權限控制的記錄類型,并增加一個reference字段。
  4. 如果需要,編寫一些hook。
  5. 將模板應用于用戶數據庫,并做一些事先調整。

注意:此方法并不限于缺陷記錄;它可以應用于任何你想進行權限控制的記錄類型中。然而,下面的場景將集中在缺陷管理上。

詳細步驟
在此場景中,一個項目中的
測試人員只能查看和修改他們自己提交的記錄,但是測試經理組的成員可以查看所有的記錄。作為一個測試人員,每次你提交一個缺陷,缺陷的security context字段會自動地將你設置為所有者。只有ClearQuest管理員可以查看和修改security context記錄類型。

此例子假定你熟悉ClearQuest定制過程--我將會瀏覽一下這些步驟,但不是詳述幕后發生了什么。如果你對此過程比較陌生,請查看你的ClearQuest文檔中的有關定制過程。

  1. 首先,你需要使用ClearQuest User Administration工具定義適當的組。我通常為每個測試人員定義一個組,然后創建一個測試經理組。在某種意義上,這些組代表了你的項目定義中的特定角色。例如,圖1-5顯示了關于我定義的組的詳細內容:

圖1:在ClearQuest中設置組

組xiaming、yangrong、zhanghan、yangrongwei和gengxueping都分別是單個測試人員的測試組。TestManager組是測試經理角色的組。

圖2:TestManager組的定義

圖3:ClearQuest管理員的SuperAdmin組的定義

圖4:定義一個Guest組

如果經過ClearQuest管理員授權,你也可以設置一個Guest組,用于不在你的項目中的用戶來訪問那些缺陷記錄。

圖5:為一個單獨測試人員設置一個組

這個單個測試人員組的例子包括成員組Guest和TestManager。

  1. 打開ClearQuest Designer,登錄到你的目標schema數據庫,并檢出(check out)TestStudio模版進行編輯。增加一個新的狀態無關記錄類型,名為ACL(此過程的步驟如下面的圖6-11所示)。此記錄類型用作security context記錄類型。

圖6:增加一個新的狀態無關記錄類型

圖7:ACL記錄類型的字段定義

圖8:ACL記錄類型的action定義

圖9:ACL記錄類型的behavior定義

圖10:ACL記錄類型的主鍵定義

圖11:ACL記錄類型的form定義

  1. 修改缺省的缺陷記錄類型,在缺陷記錄類型中增加一個新字段。這個字段用于對security context記錄的關聯,如圖12和13所示。

圖12:缺陷記錄中的ACL字段定義

圖13:將ACL字段的behavior設置為USE_HOOK。

  1. 為了自動地分割缺陷,在關聯字段上增加一個default value hook。盡管ClearQuest支持兩種腳本語言VBScript和Perl),但是以下腳本的例子使用了Perl:

sub acl_DefaultValue {
my($fieldname) = @_;

my $session;
my $username;

$session = $entity->GetSession();
$username = $session->GetUserLoginName();

$entity->SetFieldValue($fieldname, $username);
}

  1. 在關聯字段上增加一個permission hook,在改變一個缺陷記錄時設置控制權限。

sub acl_Permission {
my($fieldname, $username) = @_;
my $result;

my $userGroups, $sessionObj;
my $AuthorizedUserGroup = "SuperAdmin";

# By default, set this field readonly
$result = $CQPerlExt::CQ_READONLY;

$sessionObj = $entity->GetSession();
$userGroups = $sessionObj->GetUserGroups();

if(!@$userGroups) {
$result = $CQPerlExt::CQ_READONLY;
} else {
foreach $strAnGroup (@$userGroups) {
if ($strAnGroup eq $AuthorizedUserGroup){
$result = $CQPerlExt::CQ_OPTIONAL;
last;
}
}
}
return $result;
}

  1. 在缺陷記錄的action上增加一個access control hook。在我的例子中,我在action Modify、Delete、Duplicate和Unduplicate上增加了此hook。為了更好地維護和重用代碼,我使用record scripts來增強代碼可重用性。

在一個action的access control hook中調用代碼的一個例子如下:

sub Defect_AccessControl {
my($actioname, $actiontype, $username) = @_;
my $result;

my $params =
$actioname."\n".$actiontype."\n".$username;
$result = $entity-
>FireNamedHook("RS_AccessControl",$params);
return $result;
}

調用代碼的一個例子,其是一個record script,名為RS_AccessControl

sub Defect_RS_AccessControl {
my($result);
my($param) = @_;
# record type name is Defect

if (ref ($param) eq "CQEventObject") {
# add your CQEventObject parameter handling code here
} elsif (ref (\$param) eq "SCALAR") {
$sessionObj = $entity->GetSession();

@params = split '\n',$param;
my $username = $params[2];
?$fieldInfo = $entity-
>GetFieldValue("Submitter");
$strSubmitterName = $fieldInfo-
>GetValue();

# test if the user belongs to group "TestManager"
$userGroups = $sessionObj->GetUserGroups();
$FlagYes = "yes";
$FlagNo = "no";
$AuthorizedUserGroup1 = "TestManager";
$AuthorizedUserGroup2 = "SuperAdmin";

$flag = $FlagNo;
if (!@$userGroups) {
$flag = $FlagNo;
} else {
foreach $strAnGroup (@$userGroups) {
if ( ($strAnGroup eq $AuthorizedUserGroup1) ||
($strAnGroup eq
$AuthorizedUserGroup2) )
{
$flag = $FlagYes;
last;
}
}
}

# test if the user is same as the
submitter or belongs to group "TestManager"
if (( $username eq $strSubmitterName)||($flag eq $FlagYes)){
$result = 1;
} else {
$result = 0;
}
} else {
# add your handling code for other type parameters here, for example:
# die("Unknown parameter type");
}
return $result;
}

  1. 使用用戶組修改ACL記錄類型上的所有action的控制權限,如圖14所示。

圖14:設置控制權限

這顯示了只有在"SuperAdmin"組中的成員可以對ACL記錄類型操作。

  1. 檢入schema,并將此涉及應用到你的用戶數據庫中。
  2. 最后,ClearQuest管理員需要手工地增加一些security context記錄,這些記錄與每個測試人員組關聯在一起(圖15)。

圖15:security context記錄

注釋:在此設計中,ACL記錄的名字應當與提交者的userid完全一樣。例如,在圖15中,如果一個提交者的userid是xiaming,那么相應的ACL記錄的名字也是xiaming。

不錯,這并不是那么難,是不是?現在,你可以自己嘗試設計,來看一下缺陷記錄是否完全按照提交者分隔開了。如果系統沒有準確地分隔缺陷,重新再進行這些步驟。祝你好運!

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97