Jenkins API:User.hasPermission始终返回true

Jenkins API:User.hasPermission始终返回true,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我正在为Jenkins开发我的第一个插件,它将为Jenkins基于矩阵的安全授权添加一些额外的权限 我正在开发NetBeans 8.1中的插件。该插件可以构建并部署到Jenkins 1.625.3,我可以在矩阵表中看到我的权限 该插件有一个扩展RunListener扩展点的类。我重写了setUpEnvironment方法,并在该方法中尝试查看导致生成的用户是否具有我的新权限 不幸的是,每次我调用User.get(username).hasPermission(permission),结果都是真的

我正在为Jenkins开发我的第一个插件,它将为Jenkins基于矩阵的安全授权添加一些额外的权限

我正在开发NetBeans 8.1中的插件。该插件可以构建并部署到Jenkins 1.625.3,我可以在矩阵表中看到我的权限

该插件有一个扩展
RunListener
扩展点的类。我重写了
setUpEnvironment
方法,并在该方法中尝试查看导致生成的用户是否具有我的新权限

不幸的是,每次我调用
User.get(username).hasPermission(permission)
,结果都是真的。我通过创建两个用户简化了测试:

  • adminuser:具有管理权限
  • devuser:目前只进行整体读取,没有选中其他复选框
  • 如果我在
    setUpEnvironment
    方法中设置调试中断,并添加以下监视,则结果为真:

    User.get(“devuser”).hasPermission(hudson.model.hudson.administrate)
    
    直观地看,我看到上面的代码,认为
    haspmission
    基于
    get
    方法返回的
    User
    。但是,我开始怀疑,对用户对象调用
    haspmission
    并不重要,安全原则是某个具有uber访问权限的系统用户

    有人能给我指出正确的方向吗

    谢谢

    矩阵截图

    调试手表

    问题在于
    User.hasPermission(Permission p)
    调用了
    ACL.hasPermission(Permission p)
    ,实际上运行:

    返回hasPermission(Jenkins.getAuthentication(),p);
    
    因此,不会为已加载的
    用户
    检查权限,而是为用于执行此代码的当前
    用户
    检查权限

    如果从脚本控制台运行以下代码:

    println instance.getAuthorizationStrategy().
            hasPermission("devuser", hudson.model.Hudson.ADMINISTER)
    println instance.getAuthorizationStrategy().getACL(User.get("devuser")).
            hasPermission(User.get("devuser").impersonate(), hudson.model.Hudson.ADMINISTER)
    println instance.getAuthorizationStrategy().getACL(User.get("devuser")).
            hasPermission(User.get("devuser").impersonate(), hudson.model.Hudson.ADMINISTER)
    println instance.getAuthorizationStrategy().getACL(User.get("devuser")).
            hasPermission(hudson.model.Hudson.ADMINISTER)
    println instance.getAuthorizationStrategy().getACL(User.current()).
            hasPermission(hudson.model.Hudson.ADMINISTER)
    
    它将返回:

    false
    false
    false
    true
    true
    

    作为一种“解决方法”,尝试直接从
    Jenkins
    对象获取授权策略,并从该对象执行
    haspmission(…)
    方法:

    def instance=Jenkins.getInstance()
    instance.getAuthorizationStrategy().hasPermission(“devuser”,Jenkins.administrate)
    
    他使用的是继承自
    jenkins.model.jenkins
    @GeroldBroser的。我已经完善了我的答案。非常感谢你帮助大家!我通过使用
    instance.getAuthorizationStrategy().getACL(User.get(“devuser”))使其工作。hasPermission(User.get(“devuser”).impersonate(),hudson.model.hudson.administrate)
    这是一个棘手的问题。我浏览了|].[u]hasPermission()的代码,但没有找到任何内容。你能追踪到这些
    true
    中的哪一个是实际设置/返回的吗?我用一个构建-执行系统Groovy脚本进行了尝试,我可以确认这一行为(在v1.656中)。还有一个匿名者,他没有在这里分配任何权限。有。我会为此制造一个问题。