Servicenow使用ACL和业务规则来阅读事件表

时间:2016-11-21 10:14:49

标签: acl business-rules servicenow

我目前正致力于一个名为“read_incident”的角色,该角色应允许EES用户阅读其任务组的事件。

因此我做了以下事情:

  • 创建了一个角色“read_incident”
  • 将角色分配给“Service Desk”组
  • 创建了一个用户“Denis”并将他添加到“服务台”组
  • 使用addorcondition修改了查询事件业务规则,以包含我的“read_incident”角色来读取事件。 (现在你要么有“itil角色”,要么有“read_incident”角色来阅读事件。
  • 使用动态过滤器创建了一个ACL,以便在分配组是我的某个组时读取事件。

现在我使用一个指向“服务台”组的事件列表报告来建立一个主页。

作为管理员,我当然可以看到所有事件。但是,当我冒充“Denis”时,事件列表会报告以下“无记录显示

所以没有什么能阻止我阅读事件,但不知何故没有数据匹配。 我尝试创建一个新事件并将其分配给“服务台”,但用户“Denis”仍然无法看到此事件。

直到现在我所知道的: - 业务规则100%正常,因为没有“数据被阻止” - 我可以查询事件表

业务规则:

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);
}

1 个答案:

答案 0 :(得分:2)

您的业务规则不正确: gs.hasRole()方法返回true或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字段,它可以提高性能。我不确定业务规则脚本是否满足您的需求,我认为您应该检查用户是否是当前赋值组的成员,对吧?