对特定用户隐藏字段
根据用户角色控制字段的可见性和可编辑性。
本文档介绍如何对特定用户隐藏字段,使其无法查看和修改。更多详细内容请参考 iTop 官方文档。
概述
本示例展示如何对不具有特定角色的用户隐藏 Contract 的 cost 字段。
前置条件:熟悉教程中使用的语法,并已创建扩展。
实现方法
需要重写以下方法,阻止用户查看和修改 “cost” 值:
Get():阻止通过详情页、列表、CSV 导出或 REST 获取字段值GetAttributeFlags()和GetInitialAttributeFlags():阻止在创建和修改表单中显示和编辑 “cost” 字段
PHP 代码
public function Get($sAttCode)
{
// 每次请求对象属性时调用此函数
if (($sAttCode == 'cost') && !(UserRights::HasProfile('Service Manager')))
{
// 如果不允许查看此字段,不返回真实内容
return('****');
}
else return parent::Get($sAttCode);
}
public function GetAttributeFlags($sAttCode, &$aReasons = array(), $sTargetState = '')
{
// 在控制台编辑对象时调用此函数
// 为对象的每个字段调用
// 获取父类设置的标志
$iFlags = parent::GetAttributeFlags($sAttCode, $aReasons, $sTargetState);
// 仅修改单个字段的行为
if (($sAttCode == 'cost') && !(UserRights::HasProfile('Service Manager')))
{
// 使用 | 将新标志与现有标志组合
$iFlags = (OPT_ATT_READONLY | OPT_ATT_HIDDEN | $iFlags);
}
return $iFlags;
}
public function GetInitialStateAttributeFlags($sAttCode, &$aReasons = array())
{
// 在控制台创建对象时调用此函数
if (($sAttCode == 'cost') && !(UserRights::HasProfile('Service Manager')))
{
return(OPT_ATT_READONLY | OPT_ATT_HIDDEN | parent::GetInitialStateAttributeFlags($sAttCode, $aReasons));
}
// 其他情况由父类处理
return parent::GetInitialStateAttributeFlags($sAttCode, $aReasons);
}
效果
- cost 字段在视图、创建和修改表单中不显示
- 即使用户对该类具有批量写入权限,CSV 导入也无法写入 cost 字段
- REST/JSON API 访问也会受到限制
注意事项
- 是否需要同时设置 hidden 和 readonly 标志,还是 hidden 已隐含 readonly?
- 从 iTop 2.6.1 开始,CSV 导入在创建时已正确调用
GetInitialAttributeFlags() - 目前无法阻止用户通过 dashlet 分组查看受保护的值
参考
原文:https://www.itophub.io/wiki/page?id=3_2_0:customization:hide-field-on-profile
版本:3_2_0/customization/hide-field-on-profile.txt · Last modified: 2025/05/20 12:42 by 127.0.0.1