Jenkins API:User.hasPermission始终返回true
我正在为Jenkins开发我的第一个插件,它将为Jenkins基于矩阵的安全授权添加一些额外的权限 我正在开发NetBeans 8.1中的插件。该插件可以构建并部署到Jenkins 1.625.3,我可以在矩阵表中看到我的权限 该插件有一个扩展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),结果都是真的
RunListener
扩展点的类。我重写了setUpEnvironment
方法,并在该方法中尝试查看导致生成的用户是否具有我的新权限
不幸的是,每次我调用User.get(username).hasPermission(permission)
,结果都是真的。我通过创建两个用户简化了测试:
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中)。还有一个匿名者,他没有在这里分配任何权限。有。我会为此制造一个问题。