用户权限管理-Role-based Authorization Strategy插件

在jenkins的使用过程中,需要给用户分配只管理特定项目的权限来保证项目相关人员只能管理对应项目(比如有是三个项目a、b、c,有两个用户张三、李四,需求张三只有管理项目a的权限,李四只有管理项目b的权限,同时张三和李四都有项目c的读权限),jenkins自带的用户权限管理无法满足这样的需求。因此需要更精细的权限管理,目前使用比较广泛的是Role-based Authorization Strategy插件。

一、准备工作

首先创建两个用户张三李四,这里设定张三为RD,李四为OP

1.1 创建用户

系统管理-->管理用户-->新建用户

用户权限管理-Role-based Authorization Strategy插件

用户权限管理-Role-based Authorization Strategy插件

1.2 创建项目任务

新建两个项目project_a、project_b

我这里是以管理员身份登录的。我的视图-->新建任务

任务内具体设置,我这里先忽略。

用户权限管理-Role-based Authorization Strategy插件

用户权限管理-Role-based Authorization Strategy插件

1.3 安装插件

系统管理-->插件管理-->可选插件

输入插件名称Role-based Authorization Strategy

用户权限管理-Role-based Authorization Strategy插件

如果你已经安装过该插件,则在已安装一栏中可以看到该插件

用户权限管理-Role-based Authorization Strategy插件

二、配置全局安全策略

系统管理-->全局安全配置(Configure Global Security)

授权策略选择Role-Based Strategy

用户权限管理-Role-based Authorization Strategy插件

三、管理和分配角色

3.1 配置Manage Roles

系统管理-->Manage and Assign Roles-->Manage Roles

用户权限管理-Role-based Authorization Strategy插件

3.1.1 创建全局角色并授权

新增两个全局角色RD(开发)、OP(运维)并授予全局的Read权限,这里如果没有授权的话,普通用户登录到jenkins则会提示:用户没有Overall/read权限

用户权限管理-Role-based Authorization Strategy插件

3.1.2 创建项目角色并授权

新增两个项目角色project_a_maneger、project_b_manager,并授权。

Role to add:项目角色名称

Pattern:项目角色对应的项目,这里可以用正则匹配一类项目任务。

用户权限管理-Role-based Authorization Strategy插件

新增项目角色后授权

我这里对两个角色授予管理对应项目的所有权限

用户权限管理-Role-based Authorization Strategy插件

保存

2.3 配置Assign Roles

系统管理-->Manage and Assign Roles-->Assign Roles

在2.2已经配置好了角色和权限,那这一步就是给用户分配角色,或者说是让上面的配置生效

用户权限管理-Role-based Authorization Strategy插件

首先在Global roles里面添加之前创建的用户

用户权限管理-Role-based Authorization Strategy插件

添加完成后给用户分配角色,张三为开发人员即RD,李四为运维人员即OP

用户权限管理-Role-based Authorization Strategy插件

保存

这样就将张三李四两个人员与2.2里面设置的全局角色关联了起来,现在两者都有全部/read权限,可以正常登陆jenkins了,登陆测试一下吧

用户权限管理-Role-based Authorization Strategy插件

登陆成功没有问题。你也可以测试一下将2.2中的Global roles设置里的全剧角色RD对应的Read权限去掉,保存一下,修改配置记得保存

用户权限管理-Role-based Authorization Strategy插件

现在载去尝试使用张三用户登录,就会报错了

用户权限管理-Role-based Authorization Strategy插件

由于没有全局读权限,不会显示任何内容。

测试结束,记得将全局角色RD的读权限恢复,保存,接下来接着配置Assign RolesItem roles

在Item roles中添加之前创建的两个角色张三、李四

用户权限管理-Role-based Authorization Strategy插件

添加完成后给用户分配角色,张三分配project_a_manager的角色 ,李四分配project_b_manage的角色

用户权限管理-Role-based Authorization Strategy插件

这样我么就将张三李四分别和两个项目角色关联起来了,关联后项目角色的权限就自动对应到了用户上面,即project_a_manager这个项目角色能管理项目project_a,而张三有了这个角色后也能管理项目project_a了。保存配置然后测试一下。

四、 测试

使用张三用户登录

用户权限管理-Role-based Authorization Strategy插件

张三只能看到项目project_a

使用李四用户登录

用户权限管理-Role-based Authorization Strategy插件

李四只能看到项目project_b

这样我们就实现了,不同用户管理不同项目的目的。

总结一下,用户权限的控制其实是依赖于项目角色的权限控制,也就是项目角色才是核心,项目角色将用户和项目关联起来,在项目角色上配置对于项目的权限。

进阶

为了更加明确项目角色权限,用户权限的概念我们再来创建一个项目角色和一个用户,并且来测试一下正则表达式定义项目角色的Pattern

新建用户王五,让王五对于project_a、project_b两个项目都只有只读权限

新建用户王五

用户权限管理-Role-based Authorization Strategy插件

管理角色

系统管理-->Manage and Assign Roles-->Manage Roles

新建一个项目角色lingdao,并使用正则表示该用户可以管理project_为开头的项目

Role to add: lingdao

Pattern: project_.*

用户权限管理-Role-based Authorization Strategy插件

授权该项目角色只有读权限

用户权限管理-Role-based Authorization Strategy插件

保存

Assign Roles(分配角色)

首先在全局角色中添加用户王五,我这里将王五的全局角色归属到OP,你也可以自定义全局角色,并将王五加入你定义的全局角色,需要注意的是在添加全局角色的时候,全局角色权限必须有all/Read权限即全部/Read即所有可读,文章前文有提到。

用户权限管理-Role-based Authorization Strategy插件

在项目角色中添加用户王五,并将它绑定到项目角色lingdao中

用户权限管理-Role-based Authorization Strategy插件

保存

测试一下

王五登录两个项目都能看到

用户权限管理-Role-based Authorization Strategy插件

点开任意项目,没有操作菜单,即王五除了读权限没有其他权限。

用户权限管理-Role-based Authorization Strategy插件

完成

上一篇:【设计模式&框架实战】 SpringSecurity中的策略模式(获取Principal-User对象)


下一篇:软件设计模式之策略模式(Strategy)