隐藏用户无法执行的操作

模式设计人员可以对无权执行操作的用户隐藏此操作。
即使用户没有执行全部操作的权限,模式中的操作也会显示在 ClearQuest® 中。模式设计人员可隐藏由操作访问控制挂钩控制的操作。对用户隐藏的操作不会显示在 ClearQuest 客户机中的“修改”、“更改状态”或“实用程序”菜单中。 是否隐藏某操作由访问控制中指定的值确定。

针对 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 以隐藏操作,且访问控制设置为 SCRIPTS 时,可调用访问控制挂钩来确定是否在 ClearQuest 客户机菜单中对用户隐藏操作名称,或检查用户是否有权执行操作。模式设计人员可定制挂钩以检查指示调用挂钩原因的 ratl_GetLegalAction 会话变量值。
  • 如果 ratl_GetLegalAction 的值与当前记录的显示名称相匹配,会调用挂钩来确定是否隐藏此操作。如果应隐藏此操作名称,挂钩返回值为 0。如果应显示此操作名称,挂钩返回值为 1。
  • 如果 ratl_GetLegalAction 的值与当前记录的显示名称不匹配,会调用挂钩来确定用户是否有权运行此操作。如果访问控制挂钩返回值为 1,已选中并将运行该操作。即使在 ClearQuest 客户机菜单中对用户隐藏此操作名称,也会由嵌套挂钩或外部脚本来调用操作。 ClearQuest 客户机将显示一条一般错误消息,表明如果操作访问控制挂钩返回 0,那么不允许此操作。或者,通过将信息传递给 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 channel,以了解有关隐藏操作的更多信息。


反馈