nexus仓库权限控制配置方案

需求:根据包路径与版本号进行权限控制
第一步:创建Content Selectors

根据正则表达式匹配包路径,实现对包名与版本的控制

第一种情况:Maven权限控制

注意: 在开始介绍前说明一个maven的版本号规则,a.b.c、a.b.c.d、在之前还有一种包格式叫a.b.c-RELEASE,a.b.c.d-RELEASE

(format == "maven2" and (path =~ "^/com/szkingdom/koca/base/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*" 
or  path =~ "^/com/szkingdom/koca/admin/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*"  
or  path =~ "^/com/szkingdom/koca/boot/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*"   
or  path =~ "^/com/szkingdom/koca/parent/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*"   
or  path =~ "^/com/szkingdom/koca/plugins/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*"  
or  path =~ "^/com/szkingdom/koca/portal/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*"  
or  path =~ "^/szkingdom/yf/component/report/[^/]*?/(\\d{1,2})\\.(\\d{1,2})\\.(\\d{1,2})(?:\\.(\\d{1,2}))?(?:-RELEASE)/.*"  ))

上述命令解析:
format=maven2 表示包格式为maven2,也就是maven包
path表示包的路径,是一个正则表达式

第一个路径:path =~ "^/com/szkingdom/koca/base/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*"
表示匹配/com/szkingdom/koca/base,同时版本号从0.0.0->4.99.99,0.0.0.0->4.99.99.99, 从5.0.0->5.2.99   5.0.0.0->5.2.99.99 ,用一句话来概括就是匹配5.3.0之前所有的版本

第二个路径:path =~ "^/com/szkingdom/koca/admin/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*"
和上面一样,匹配/com/szkingdom/koca/admin的包

path =~ "^/com/szkingdom/koca/boot/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*"  
or  path =~ "^/com/szkingdom/koca/parent/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*"   
or  path =~ "^/com/szkingdom/koca/plugins/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*"  
or path =~ "^/com/szkingdom/koca/portal/[^/]*?/([0-4]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?|5\.[0-2]\.\d{1,2}(?:\.\d{1,2})?)/.*" 
这几个路径原理也是一样。
最后一个路径 :
path =~ "^/szkingdom/yf/component/report/[^/]*?/(\\d{1,2})\\.(\\d{1,2})\\.(\\d{1,2})(?:\\.(\\d{1,2}))?(?:-RELEASE)/.*"
匹配包路径:/szkingdom/yf/component/report/,版本号匹配0.0.0(.d)(.e)-99.99.99(.99)(-RELEASE)
其中.d和.e是可选的。

第二种情况:NPM权限控制
注意: 在开始介绍前说明一个npm版本号规则,a.b.c、a.b.c-xxx、a.b.c.d、a.b.c.d-xxx

(format == "npm" and (path =~ "^@szkingdom.koca/admin-(\S+)/-/admin-(\S+)-([0-5][0-2]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?(?:-(\d{1,3}))?).tgz" 
or   path =~ "^@szkingdom.koca.pro/(\S+)/-/(\S+)-([0-5][0-2]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?(?:-(\d{1,3}))?).tgz" ))

上述命令解析:
format=npm 表示包格式为npm,也就是npm包
path表示包的路径,是一个正则表达式

第一个路径 :path =~ "^@szkingdom.koca/admin-(\S+)/-/admin-(\S+)-([0-5][0-2]\.\d{1,2}\.\d{1,2}(?:\.\d{1,2})?(?:-(\d{1,3}))?).tgz" 
表示匹配包路径为:@szkingdom.koca/admin-xx,其中xx表示任意字符,可以是admin-basic等,

[0-5][0-2]?: 匹配第一个数字在 0 到 5 之间,第二个数字在 0 到 2 之间。
\.\d{1,2}: 匹配点后面跟着 1 或 2 位数字。
(?:\.\d{1,2})?: 同上,但整个模式是可选的。
(?:-(\d{1,3}))?: 匹配一个可选的短划线 - 后面跟着 1 到 3 位数字。这部分也被括起来,意味着它被捕获为第三个组。
所以版本号的匹配是从0.0.0(.0)(-000)-5.2.99(.99)(-999),也就是匹配5.3.0之前的所有包

第二个路径也是类似的原理

第二步:创建权限


第三步:后面创建角色,把权限赋值给角色,现创建用户,把角色赋值给用户

第四步:对用户进行权限测试:


可以看到对版本号大于5.3.0的版本无法下载