如何检查用户是否属于服务器端的某些用户标准?

How to check if a user belongs to some user criteria at server side?

根据官方wiki page,用户标准记录可能包含一组特定的用户、组、角色、部门....

我的问题是,我是否必须根据用户标准对用户进行手动检查,例如:

  1. 检查用户是否存在于用户标准用户列表中
  2. 然后如果之前的测试失败,检查用户角色是否存在于用户标准角色列表中
  3. 然后如果之前的测试失败,检查部门....等等

或者雪地里是否有开箱即用的东西可以为我执行这些检查?我想应该有一些方法,但我在官方 wiki 或文档中找不到任何相关内容

我相信您正在寻找的是全部匹配复选框,请查看http://wiki.servicenow.com/index.php?title=User_Criteria#Matching_All

中的文档

如果您 un-check 此框,它会检查用户是否匹配条件的 任何 部分。

如果您选中此框,则需要匹配所有个条件。

示例 1 - 全部匹配un-checked

在此示例中,全部匹配un-checked,如果用户满足以下任何条件,则他们是此用户标准的一部分。

User in role: Asset
or
User in company: ACME EMEA
or
User in department: Development

示例 2 - 全部匹配 已选中

在此示例中,全部匹配 已选中,并且用户必须满足以下所有条件,他们是此用户条件的一部分.

User in role: Asset
and
User in company: ACME EMEA
and
User in department: Development

因此有一个内置函数可以获取当前登录用户可用的所有用户条件记录的 ID:

SNC.UserCriteriaLoader.getAllUserCriteria()

上面的函数returns类型为ArrayList<String>的对象,所以可以通过以下方式检查目标用户条件是否存在于该对象中: SNC.UserCriteriaLoader.getAllUserCriteria().contains(user_criteria_sys_id)

这解决了我的问题,但是我仍然不知道是否有一些通用的方法接受用户 ID 作为参数

除了SNC.UserCriteriaLoader.getAllUserCriteria()还有一个更通用的方法:

SNC.UserCriteriaLoader.getUserCriteria(userId)

似乎是 return 指定用户的匹配用户条件列表 (ArrayList<String>)。例如。

SNC.UserCriteriaLoader.getUserCriteria(gs.getUserID())

SNC.UserCriteriaLoader.getAllUserCriteria()

return同样的结果。