【问题标题】:How to check if a user belongs to some user criteria at server side?如何在服务器端检查用户是否属于某些用户条件?
【发布时间】:2016-12-08 17:05:07
【问题描述】:

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

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

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

或者在雪地里有什么开箱即用的东西可以为我执行这些检查?我想应该有某种方式,但我在官方 wiki 或文档中找不到任何相关的东西

【问题讨论】:

    标签: permissions servicenow


    【解决方案1】:

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

    SNC.UserCriteriaLoader.getAllUserCriteria()

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

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

    【讨论】:

    • 谢谢,我找了很久。你是怎么得到这些信息的?我没有找到任何关于此的文档...
    • 嗨@makim,我很幸运,chuck tomasi 在官方论坛上看到了我的问题并回答了它,这是链接community.servicenow.com/thread/246758
    【解决方案2】:

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

    如果您取消选中此框,它会检查用户是否符合条件的任何部分。

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

    示例 1 - 匹配所有 未选中

    在此示例中,全部匹配未选中,如果用户满足以下任何条件,他们就是此用户条件的一部分。

    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
    

    【讨论】:

    • 感谢您的回复,但我问的是是否已经存在一种编程方式/函数来评估某些用户是否属于某些用户标准,例如像 checkUserCriteria(userId, userCriteriaId) 这样的东西,这个函数会检查你提到的那个复选框和其他字段(角色、部门、组)并返回一个布尔值,我找到了一个 BTW SNC.UserCriteriaLoader.getAllUserCriteria(),它返回当前登录用户可用的用户标准 ID 数组
    • 你想用这个做什么,似乎用户标准只适用于现有会话,而不是作为其中的成员。您唯一的选择是手动检查您的代码,例如您的问题。
    • 实际上SNC.UserCriteriaLoader.getAllUserCriteria() 对我来说已经足够了,但我的目标是编写一个接受用户 id 作为输入的通用程序,但看起来雪中不支持类似的东西
    • 如果你有什么想法,请输入答案。它可能会帮助其他人
    【解决方案3】:

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

    SNC.UserCriteriaLoader.getUserCriteria(userId)

    它似乎返回了指定用户的匹配用户标准 (ArrayList<String>) 列表。例如。

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

    SNC.UserCriteriaLoader.getAllUserCriteria()

    返回相同的结果。

    【讨论】:

    • hi lurii,这个方法在我提问的时候不可用,我会在雅加达版本上测试一下,给你反馈,谢谢
    • 它在雅加达或伊斯坦布尔不起作用 :( 当我从修复脚本“JoinQuery 无效字段名称:user_criteria”尝试它时,它给了我这个错误消息
    • @AbdoAdel 我测试了它,你是对的,如果你内联使用它就行不通。但是,如果将其分成 2 个语句,它应该可以正常工作:var userId = gs.getUserId() 和 SNC.UserCriteriaLoader.getUserCriteria(userId)。请让我知道这是否适合您,我会更新我的答案
    • 请忽略我之前的评论。我一直在使用这种方法,发现它不会产生必要的结果并且不稳定。如果我想到了什么,我会再写一条评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2016-04-06
    • 1970-01-01
    • 2017-06-18
    • 2012-11-12
    • 2017-09-23
    • 1970-01-01
    相关资源
    最近更新 更多