verdaccio简单的权限插件

4,364 阅读2分钟

本文仅是技术验证,记录,交流,不针对任何人。有冒犯的地方,请谅解。 该文首发于https://vsnail.cn/static/doc/blog/verdaccioPlugin.html

背景

最近几天用verdaccio搭建了npm私服,具体搭建过程可以参见上一篇文章《 NPM 私服搭建》。在使用私服的过程中,发现权限体系并不能很好的满足个人需求。因此在查阅文档后,自己开发了一个小的权限插件。

默认权限体系

verdaccio 的默认权限体系,使用了htpasswd作为权限插件。该插件主要是解决"人"的问题,指定权限都是从"人"出发。因此对于分组,这个插件仅提供了$all$authenticated$anonymous三个分组。

对权限的需求

因为公司划分了几个业务团队,那么需要按业务团队做一些权限划分,并且人数还比较多。如果按照人来设置,则比较麻烦。因此我们需要能够按分组来进行权限设置。

verdaccio 插件

在翻阅了verdaccio的官方文档,发现verdaccio是支持插件的。可以通过重写allow_accessallow_publishallow_unpublish方法,来实现权限的控制。这三个方法,都需要返回一个方法,而这个方法自动注入了三个参数user, pkg, callback

  • user 用户信息。包含namegroups属性。
  • pkg 包信息。包含nameaction属性。
  • callback 回调函数。通过权限认证,执行的函数。

编写verdaccio插件有一个特别需要注意的就是发布出来的包名。包名必须为verdaccio-**.

编写verdaccio-simplegroup插件

就像这个插件的名字一样,一个及简单的以'组'的粒度来为verdaccio提供权限支撑的插件。

github地址:https://github.com/btshj-snail/snail-verdaccio-group

npm包:verdaccio-simplegroup

这里面代码是简单的,因此也不再表述了。

使用verdaccio-simplegroup插件

参见https://github.com/btshj-snail/snail-verdaccio-group/blob/master/README.md