如何通过Groovy移除Jenkins指定用户的特定权限?
Jenkins 移除指定用户特定权限的实现方法
你可以直接单独移除指定用户的特定权限,不需要清空该用户全部权限后再重新批量添加。
虽然GlobalMatrixAuthorizationStrategy官方API没有公开remove()类方法,但其内部通过grantedPermissions这个Map结构存储所有权限的授予关系:
- Map的key为权限对象(比如
hudson.model.Item.CONFIGURE) - Map的value为持有对应权限的用户/组ID的Set集合
你只需要操作对应权限的Set集合,移除目标用户ID,再保存配置即可生效。
可用示例脚本
import hudson.model.* import jenkins.model.Jenkins import hudson.security.Permission import hudson.security.GlobalMatrixAuthorizationStrategy // 配置参数:要操作的用户ID、需要移除的权限列表 String userId = "my_user" List<Permission> permissionsToRemove = [hudson.model.Item.CONFIGURE] Jenkins instance = Jenkins.get() def authStrategy = instance.getAuthorizationStrategy() // 先校验当前使用的是矩阵授权策略 if (!(authStrategy instanceof GlobalMatrixAuthorizationStrategy)) { println "当前授权策略不是GlobalMatrixAuthorizationStrategy,脚本不适用" return } permissionsToRemove.each { permission -> // 检查该权限是否有授予的用户记录 if (authStrategy.grantedPermissions.containsKey(permission)) { // 从该权限的授权集合中移除目标用户 authStrategy.grantedPermissions.get(permission).remove(userId) // 如果移除后该权限没有任何授权对象,可以选择清理掉这条空记录 if (authStrategy.grantedPermissions.get(permission).isEmpty()) { authStrategy.grantedPermissions.remove(permission) } } } instance.setAuthorizationStrategy(authStrategy) instance.save() println "权限移除操作完成"
注意事项
- 操作前请先备份Jenkins全局配置,避免权限配置错误导致管理员无法登录
- 本脚本仅适用于Jenkins原生的「Matrix Authorization Strategy」授权策略,如果你使用的是Role-Based Strategy等第三方权限插件,需要对应调整操作逻辑
- 脚本需要在Jenkins后台「系统管理」-「脚本控制台」中运行
内容的提问来源于stack exchange,提问作者cat_nip_coffee
相关产品推荐
相关产品推荐

