3

我有一个客户端的颠覆服务器,它使用 MySQL 数据库对员工进行身份验证,并使用 AuthUserFile (htpasswd) 将其他用户(供应商)验证到他们的存储库中。

我需要授予员工完全访问权限,* = rw并且只访问供应商的子树。(像这样):

[/]
* = rw   #employees
vendor_user = 

[/sub-repo]
vendor_user = rw

不幸的是,尽管有更多限制性规则,SVN auth 的设计似乎级联* = rw到所有内容,例如 vendor_user =

如果有人有建议,我将不胜感激!

4

2 回答 2

2

我认为这是不可能的,但即使是这样,我也不能说我会推荐做这样的事情。从安全的角度来看,授予一揽子读/写访问权限然后有选择地删除权限是极其危险的。例如,如果您忘记删除新添加的供应商的权限怎么办?

也许您可以定义一个“员工”组:

[groups]
employees = user1,user2,user3

然后你可以去:

[/]
@employees = rw
vendor_user =

另外:最好编写一个脚本来生成/维护列表。由于所有用户都列在数据库中,因此您可以使用脚本查询数据库并根据需要生成新的访问列表。

于 2011-08-11T08:37:55.603 回答
2

团体绝对是要走的路,但你仍然有问题。如果您的用户无法看到根文件夹,他们将无法访问您希望他们看到的子文件夹。

出于这个原因,我在顶层使用最少的有意义的文件夹来构建 repo,例如:

trunk/
    client/
    services/
    api/

然后使用一揽子读取访问权限设置权限,即:

[groups]
core = user1, user2, user3
client = user4

[repo:/]
* = r

[repo:/trunk/client]
@core = rw
@client = rw

[repo:/trunk/services]
@core = rw
@client =

[repo:/trunk/api]
@core = rw
@client = r

Jared 是正确的,这有其风险,您需要小心确保您的用户不会将文件放在他们不应该放在任何地方(删除文件是一种痛苦,因此我通常也对核心用户使用只读)但只要您仔细设置了存储库(例如,在分支下镜像主干顶层结构以保持 authz 文件简单),这是一种有效的工作方式。

于 2012-11-30T00:48:08.883 回答