使用cnpm搭建个人私有npm仓库(二)——私有仓库的权限控制

上一篇(使用cnpm搭建个人私有npm仓库(一)——简单介绍及基本配置)介绍了如何使用cnpm搭建私有npm仓库,今天来讲一讲私有仓库的权限控制。

有时候出于各种原因,不想让其他人安装私有仓库上的包或者发布包到私有仓库,就可以开启权限控制功能。

在上一篇配置的基础上,添加几个属性

enablePrivatetrue时表示只有admin才能发布包

userService 为提供身份验证的接口,写个最简单的就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const users = [
{
login: 'lonord',
password: 'xxxxxxxx',
email: 'lonord@qq.com',
site_admin: true
}
]

class UserService {
async auth(login, password) {
for (const user of users) {
if (user.login === login && user.password === password) {
return user
}
}
}

async get(login) {
for (const user of users) {
if (user.login === login) {
return user
}
}
}

async list(logins) {
const l = []
users.forEach(user => {
if (logins.indexOf(user.login) >= 0) {
l.push(user)
}
})
return l
}

async search(query, options) {
return users
}
}

设置userService: new UserService()就可以了,验证接口介绍可以参考官方文档:https://github.com/cnpm/cnpmjs.org/wiki/Use-Your-Own-User-Authorization

到此就可以实现对发布包的权限控制,如果还需要对安装也进行限制,请继续往下看

alwaysAuth 设置为true时,使用npm install命令安装私有仓库的包也需要验证身份。同时客户端也需要修改配置,添加用户时需要指定--always-auth参数

1
$ npm adduser --registry=http://localhost:7001 --scope=@lonord --always-auth

完整配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module.exports = {
database: {
db: 'cnpmjs',
host: 'localhost',
port: 3306,
username: 'cnpmjs',
password: 'cnpmjs123'
},
admins: {
admin: 'admin@cnpmjs.org',
},
syncModel: 'none',
forcePublishWithScope: true,
scopes: ['@lonord'],
registryHost: 'localhost:7001',

enablePrivate: true,
userService: new UserService(),
alwaysAuth: true
};