1.1. 项目背景

Subversion使用配置文件进行基于路径的授权,手工配置易于出错。 下面是一个错误百出的配置示例:

[groups]
admin = &admin, admin1, admin2
group1 = @group2, user1
group2 = user2, @group1

[aliases]
admin = jiangxin

[/]
@admin = rw

[/trunk]
$authenticated = rw

[repos1:/]
* =
user1 =
@group1 = r
@admin = rw

[repos1:/trunk/src]
* =
@group1 = rw
@visiters = r

其中的错误或可能的错误有:

  1. 组的循环引用: group1包含了group2,而group2又反过来包含group1,造成循环引用。

  2. 包含未定义的组或者别名: 例如在 repos1 版本库的 /trunk/src 的策略中用到了 @visiters 组, 而该组没有在[groups]小节中定义;

  3. 潜在的配置错误: 版本库repos1的根路径,欲限制user1的访问,而实际效果并非如此, 因为uer1属于group1组,而group1组被授权。user1实际获得的权限是策略能够给予 的最大权限;

  4. 潜在的配置错误: 访问版本库repos1的 /trunk 目录,会参照缺省的[/trunk]小节设置, 这可能跟管理员本意不符。需要对repos1的/trunk重新定义权限以覆盖缺省的 [/trunk]小节的设置。

其中1和2的错误会造成Subversion服务中断故障!3和4的问题如果不经过测试很难发现! 在我们为客户实施Subversion技术支持服务过程中,发现了用户迫切需要容错性强的 授权管理工具,于是便有了开发图形化管理界面的打算。选择 Python 是因为 Python 语言的魅力以及 Python 开发过程的高效。