Servicenow 使用 ACL 和业务规则读取事件 table
Servicenow Working with ACLs and Business Rules to read Incident table
我目前正在开发一个名为 "read_incident" 的角色,该角色应允许 EES 用户读取其分配组的事件。
因此我做了以下事情:
- 创建了一个角色"read_incident"
- 已将角色分配给组 "Service Desk"
- 创建了一个用户 "Denis" 并将他添加到 "Service Desk" 组
- 使用 addorcondition 修改了查询事件业务规则,以包含我的 "read_incident" 角色来读取事件。 (现在您要么具有 "itil role",要么具有读取事件的 "read_incident" 角色。
- 如果分配组是我的组之一,则创建一个带有动态过滤器的 ACL 来读取事件。
现在我使用分配给 "service desk" 组的事件列表报告的量表创建了一个主页。
作为管理员,我当然可以看到所有事件。但是当我冒充"Denis"时,事件列表报告如下“No records to display”
所以没有什么能阻止我阅读事件,但不知何故没有数据匹配。
我尝试创建一个新事件并将其分配给 "service desk",但用户 "Denis".
仍然看不到该事件
到目前为止我所知道的:
- 业务规则 100% 有效,因为没有 "data is blocked" - 我可以查询事件 table
业务规则:
if (!gs.hasRole("itil").addOrCondition(!gs.hasRole("read_incident") && gs.isInteractive()) {
var u = gs.getUserID();
var qc = current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list", "CONTAINS", u);
gs.print("query restricted to user: " + u);
}
您的业务规则不正确:gs.hasRole() 方法 returns true or false,您不能使用方法 addOrCondition () 那里。你的if语句也有错误,需要在条件末尾加一个")"。
尝试以下操作:
业务规则条件
(!gs.hasRole("itil") || !gs.hasRole("read_incident")) && gs.isInteractive()
脚本
(function executeRule(current, previous /*null when async*/) {
var u = gs.getUserID();
current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list", "CONTAINS", u);
})(current, previous);
最好尽可能使用Condition字段,这样可以提高性能。我不确定业务规则脚本是否满足您的需求,我认为您应该检查用户是否是当前assignment_group的成员,对吗?
我目前正在开发一个名为 "read_incident" 的角色,该角色应允许 EES 用户读取其分配组的事件。
因此我做了以下事情:
- 创建了一个角色"read_incident"
- 已将角色分配给组 "Service Desk"
- 创建了一个用户 "Denis" 并将他添加到 "Service Desk" 组
- 使用 addorcondition 修改了查询事件业务规则,以包含我的 "read_incident" 角色来读取事件。 (现在您要么具有 "itil role",要么具有读取事件的 "read_incident" 角色。
- 如果分配组是我的组之一,则创建一个带有动态过滤器的 ACL 来读取事件。
现在我使用分配给 "service desk" 组的事件列表报告的量表创建了一个主页。
作为管理员,我当然可以看到所有事件。但是当我冒充"Denis"时,事件列表报告如下“No records to display”
所以没有什么能阻止我阅读事件,但不知何故没有数据匹配。 我尝试创建一个新事件并将其分配给 "service desk",但用户 "Denis".
仍然看不到该事件到目前为止我所知道的: - 业务规则 100% 有效,因为没有 "data is blocked" - 我可以查询事件 table
业务规则:
if (!gs.hasRole("itil").addOrCondition(!gs.hasRole("read_incident") && gs.isInteractive()) {
var u = gs.getUserID();
var qc = current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list", "CONTAINS", u);
gs.print("query restricted to user: " + u);
}
您的业务规则不正确:gs.hasRole() 方法 returns true or false,您不能使用方法 addOrCondition () 那里。你的if语句也有错误,需要在条件末尾加一个")"。
尝试以下操作:
业务规则条件
(!gs.hasRole("itil") || !gs.hasRole("read_incident")) && gs.isInteractive()
脚本
(function executeRule(current, previous /*null when async*/) {
var u = gs.getUserID();
current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list", "CONTAINS", u);
})(current, previous);
最好尽可能使用Condition字段,这样可以提高性能。我不确定业务规则脚本是否满足您的需求,我认为您应该检查用户是否是当前assignment_group的成员,对吗?