30.4.2 通配符版本库的授权
授权文件如下:
1 @administrators=jiangxin admin
2 @dev=dev1 dev2 badboy
3 @test=test1 test2
4
5 repo sandbox/.+$
6 C=@administrators
7 R=@test
8 -=badboy
9 RW=@dev test1
这个授权文件的版本库名称中使用了正则表达式,匹配在sandbox下的任意版本库。
正则表达式末尾的$有着特殊的含义,代表匹配字符串的结尾,明确告诉Gitolite这个版本库是通配符版本库。因为加号+既可以作为普通字符出现在版本库的命名中,又可以作为正则表达式中特殊含义的字符,如果Gitolite将授权文件中的通配符版本库误判为普通版本库,就会自动在服务器端创建该版本库,这可不是管理员希望发生的。
我修改了Gitolite的代码,能正确判断部分正则表达式,但是最好还是对简单的正则表达式添加^作为前缀或$作为后缀,以避免误判。
正则表达式定义的通配符版本库不会自动创建,需要管理员手动创建。
Gitolite原来对通配符版本库的实现是克隆即创建,但是这样很容易因为录入错误而导致错误的版本库被意外创建。我改进的Gitolite需要通过推送来创建版本库。
下面的示例通过推送操作(以admin用户身份),远程创建版本库sandbox/repos1.git。
$git push gitolite[1]:sandbox/repos1.git master
创建完毕后对各个用户的权限进行测试会发现:
用户admin对版本库具有写的权限。
这并不是因为第6行的授权指令为@administrators授予了C的权限。而是因为该版本库是由admin用户创建的,创建者具有对版本库完全的读写权限。
服务器端该版本库目录自动生成的gl-creator文件记录了创建者的ID为admin。
用户jiangxin对版本库没有读写权限。
虽然用户jiangxin和用户admin一样都可以在sandbox/下创建版本库,但是由于sandbox/repos1.git已经存在并且不是jiangxin用户创建的,所以jiangxin用户没有任何权限,不能读写。
和之前的例子相同的是:
〇用户test1对版本库具有写的权限。
〇禁用指令让用户badboy对版本库只具有读操作的权限。
版本库的创建者还可以使用setperms命令为版本库添加授权。具体用法参见下面的示例。
[1]gitolite是安装Gitolite过程中创建的主机别名,是以admin用户身份连接Git服务器。