【问题标题】:Maximo automation script get user securityGroupMaximo 自动化脚本获取用户 securityGroup
【发布时间】:2018-06-04 15:06:00
【问题描述】:

我想在 Maximo 自动化脚本中获取用户的安全组,以便进行比较。我需要知道 MaxAdmin 或 UserUser 组中的用户是否执行我的脚本的其余部分。我的脚本是 Python 的

我如何获得该信息?

【问题讨论】:

    标签: maximo


    【解决方案1】:

    自动化脚本中有一些隐式变量可供您使用(查看 IBM 自动化脚本指南),其中之一是当前用户的用户名。还有一个 :&USERNAME& 特殊绑定变量被当前用户名替换。您可以使用其中一个作为查询的一部分来获取 GroupUser MBO,然后检查它的计数。

    我的记忆在这里,所以确切的名称和语法可能不同,但类似:

    groupUserSet = MXServer.getMXServer().getMboSet("GROUPUSER", MXServer.getMXServer().getSystemUserInfo())
    groupUserSet.setWhere("userid = :&USERNAME& and groupname in ('MAXADMIN', 'USERUSER')")
    # Not really needed.
    groupUserSet.reset()
    
    if groupUserSet.count() > 0:
        # The current user is in one of the relevant groups.
    else:
        # The current user is not in one of the relevant groups.
    groupUserSet.close()
    

    值得注意的是,与此类逻辑相关的事物通常不需要自动化脚本。通常条件表达式、正常的安全权限或报告可以在这里做你需要的。即使需要像这样的自动化脚本,你仍然不应该仅仅基于组,而是基于用户是否具有一定的权限。

    编辑

    要使用权限执行此操作,您需要向应用添加一个新的 sigoption,其 ID 类似于“CANCOMPPERM”(带有更详细的描述),并将其授予这两个组。确保这些组中的每个人同时注销(因此这两个组中的任何人都不会在给定时间点登录系统),否则权限缓存将不会更新。您的代码将如下所示:

    permissionsSet = MXServer.getMXServer().getMboSet("APPLICATIONAUTH", MXServer.getMXServer().getSystemUserInfo())
    permissionsSet.setWhere("optionname = 'CANCOMPPERM' and groupname in (select groupname from groupuser where userid = :&USERNAME& )")
    # Not really needed.
    permissionsSet.reset()
    
    if permissionsSet.count() > 0:
        # The current user has the necessary permission.
    else:
        # The current user does not have the necessary permission.
    permissionsSet.close()
    

    我认为 Maximo 的代码库中甚至有一些帮助方法,您可以调用这些方法来为您执行上述操作,并在是否授予权限时返回真/假。

    【讨论】:

    • 我似乎无法获取任何数据,我收到此错误AttributeError: 'NoneType' object has no attribute 'count' in <script> at line number 10 我已将"GROUPUSER" 更改为"$GROUPUSER",但我仍然收到此错误。
    • 不是基于组名而是基于被授予的权限是非常好的建议。一个组被删除并让另一个组取而代之的可能性很高,但 sig 选项(权限)名称往往会保持不变。
    • @Dex 将 Mbo 上的 getMboSet() 与 MXServer 上的 getMboSet() 混合在一起。 MXServer 上的 getMboSet() 将对象名称作为字符串和 UserInfo 对象。然后,您必须在触发 fetch 之前调用返回的 MboSet 上的 setWhere() 方法。
    • 我可能提供的信息太少。简而言之,我需要只有 MaxAdmin 和 UserUser 能够完成PERM类型的任务(所有其他类型不受影响)是否可以在获得许可的情况下完成?
    • 我确实把它弄混了。在去上班之前,我急于这样做。不过,我不确定接近的事情。我记得很久以前查过它,发现它是多余的,但我现在不记得有比这更多的细节来证明它的合理性了。
    猜你喜欢
    • 2015-06-10
    • 2018-08-18
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多