Permissions 如何在服务器端检查用户是否属于某些用户条件?

Permissions 如何在服务器端检查用户是否属于某些用户条件?,permissions,servicenow,Permissions,Servicenow,根据官方标准,用户标准记录可能包含一组特定的用户、组、角色、部门 我的问题是,我是否必须根据用户标准对用户进行手动检查,例如: 检查用户条件用户列表中是否存在该用户 然后,如果上一次测试失败,请检查用户角色是否存在于用户条件角色列表中 然后,如果上一次测试失败,请检查是否有部门。。。。等等 或者在雪地里有什么东西可以帮我做这些检查?我想应该有办法,但我在官方维基或文档中找不到任何相关内容我相信您要查找的是“全部匹配”复选框,请查看 如果取消选中此框,它将检查用户是否符合条件的任何部分 如果选中此

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

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

  • 检查用户条件用户列表中是否存在该用户
  • 然后,如果上一次测试失败,请检查用户角色是否存在于用户条件角色列表中
  • 然后,如果上一次测试失败,请检查是否有部门。。。。等等

  • 或者在雪地里有什么东西可以帮我做这些检查?我想应该有办法,但我在官方维基或文档中找不到任何相关内容

    我相信您要查找的是“全部匹配”复选框,请查看

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

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

    示例1-全部匹配未选中

    在本例中,“全部匹配”是未选中的,若用户满足以下任何条件,则它们是该用户条件的一部分

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

    示例2-选中“全部匹配”

    在本例中,选中了“全部匹配”,并且用户必须满足以下所有条件,它们是此用户条件的一部分

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

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

    SNC.UserCriteriaLoader.getAllUserCriteria()

    上述函数返回类型为
    ArrayList
    的对象,因此您可以通过以下方式检查此对象中是否存在目标用户条件:
    SNC.UserCriteriaLoader.getAllUserCriteria()包含(用户标准系统id)


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

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

    SNC.UserCriteriaLoader.getUserCriteria(userId)

    它似乎返回指定用户的匹配用户条件列表(
    ArrayList
    )。例如

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

    SNC.UserCriteriaLoader.getAllUserCriteria()


    返回相同的结果。

    谢谢您的回复,但我想问的是,是否已经存在一种编程方式/函数来评估某个用户是否属于某些用户条件,例如
    checkUserCriteriad(userId,userCriteriaId)
    ,此函数将检查您提到的复选框和其他字段(角色、部门、组)并返回一个布尔值,我找到了一个one-BTW
    SNC.UserCriteriaLoader.getAllUserCriteria()
    返回当前登录用户可用的用户标准ID数组。您打算如何处理此问题,用户标准似乎只适用于现有会话,而不是作为其成员。您唯一的选择是手动检查代码,如您的问题。实际上
    SNC.userCriteriaLoader.getAllUserCriteria()
    对我来说已经足够了,但我的目标是编写一个通用的,可以接受用户id作为输入,但在Snower中似乎不存在类似的支持。如果你有什么想法,请输入答案。这可能会对其他人有所帮助。我搜索了这么久。你是如何获得这些信息的?我没有找到任何关于这方面的文档s…嗨@makim,我很幸运chuck tomasi在官方论坛上看到了我的问题并回答了它,这是链接hi lurii,在我提问时这种方法不可用,我将在雅加达版本上测试它并给你反馈,thanksit在雅加达或伊斯坦布尔不起作用:(当我从修复脚本“JoinQuery无效字段名:user_criteria”@AbdoAdel尝试它时,它给了我这个错误消息。我测试了它,你是对的,如果你内联使用它,它不起作用。但是,如果你把它分成两个语句:var userId=gs.getUserId()和SNC.UserCriteriaLoader.getUserCriteria(userId),它应该可以正常工作。请让我知道这是否适用于您,我将更新我的回答。请忽略我以前的评论。我一直在使用此方法,并发现它不会产生必要的结果,也不稳定。如果我发现某些问题,我将再写一条评论。