如何使用 Groovy 从用户中删除特定的 Jenkins 用户权限?

How do I remove specific Jenkins User permissions form a User using Groovy?

我可以使用以下通用脚本添加特定的Permission to a User

import hudson.model.*
import Jenkins.*
import hudson.security.Permission
import hudson.security.GlobalMatrixAuthorizationStrategy

String userId = "my_user"
List<String> userPermissionList = [hudson.model.Item.CONFIGURE]

Hudson instance = Jenkins.get()
GlobalMatrixAuthorizationStrategy authStrategy = Jenkins.instance.getAuthorizationStrategy()

// Adding each permission from list
userPermissionList.each { permission ->
    authStrategy.add(permission, userId)
    instance.setAuthorizationStrategy(authStrategy)
}

instance.save()

但是,我到处寻找如何删除用户的特定权限。查看 GlobalMatrixAuthorizationStrategy,有一个 add() 方法,但是没有任何类型的 remove()

这可能吗??? (必须是)

或者我是否已将差异添加到用户?就像这样,清除用户的所有权限并添加回除我要删除的权限之外的所有权限。

解决方案

Permission class 有一个名为 enabled 的属性以及相关的 getter 和 setter。您可以通过设置 permission.enabled = true 添加权限,并删除您应该明确设置的权限 permission.enabled = false

The default value for permission.enabled may be different depending on what version of Jenkins you are running. It is best to explicitly set this value either way

import hudson.model.*
import Jenkins.*
import hudson.security.Permission
import hudson.security.GlobalMatrixAuthorizationStrategy

def userId = "gfarkas"
def userPermissionList = [hudson.model.Item.CONFIGURE]

Hudson instance = Jenkins.get()
GlobalMatrixAuthorizationStrategy authStrategy = Jenkins.instance.getAuthorizationStrategy()

// Removing each permission from list
userPermissionList.each { permission ->
    permission.enabled = false
    authStrategy.add(permission, userId)
    instance.setAuthorizationStrategy(authStrategy)
}

instance.save()

This intended to be ran in the Jenkin's Script Console

在 运行 上述脚本之前,用户具有以下权限

并且在 运行 这个脚本之后,用户拥有以下权限

如果我使用 permission.enabled = true 重新运行脚本,则用户具有以下权限