我在 Windows 上使用 VirtualSVN + Trac-plugin 来处理多个项目。我在 VirtualSVN 中配置了用户和组,这样只有授权的用户/组才能访问指定的资源。
例如:
- 客户1可以访问存储库1和Trac1
- 客户2可以访问Repository2和Trac2
- 匿名者无法访问任何 svn 存储库。
在我的系统上,一旦 Customer2 登录,他就可以访问 Repository2、Trac2还有 Trac1。这并不像预期的那样。
svn 的 apache 配置部分
<Location /svn>
DAV svn
SVNListParentPath off
SVNParentPath "D:/repos/svn"
SVNPathAuthz on
AuthName "Subversion Repositories"
AuthType Basic
AuthBasicProvider file
AuthUserFile "D:/repos/svn/htpasswd"
AuthzSVNAccessFile "D:/repos/svn/authz"
require valid-user
</Location>
Trac 的 apache 配置部分
LoadModule python_module "trac/python/mod_python_so.pyd"
LoadModule authz_user_module "bin/mod_authz_user.so"
<Location /trac>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir "d:/repos/trac"
PythonOption TracUriRoot /trac
AuthName "Trac"
AuthType Basic
AuthBasicProvider file
AuthUserFile "d:/repos/svn/htpasswd"
Require valid-user
</Location>
我试图声明AuthzSVNAccessFile“D:/repos/svn/authz”对于 Trac 来说。但它并不能完全发挥作用。
有人能帮我纠正这个问题吗?提前谢谢了。
答案1
这个问题可以拆分成两个部分:
1)限制使用 trac 浏览 svn 源,如 authz 文件所述
您必须告诉 trac authz 文件在哪里。
编辑 d:/repos/trac/tracX/trac.ini 中的 trac.ini 文件:
[trac]
authz_file = D:/repos/svn/authz
authz_module_name = name_of_the_module_as_in_authz_file_for_this_trac
2)限制谁可以访问哪些路径。
它与 authz 文件无关,因为 trac 没有使用它来授予 trac 系统权限。
使用基本身份验证时,您有两个选择:
a) 如果您放弃使用 TracEnvParentDir 的一个配置并将其更改为两个 Location 条目,那么您可以更改 Require 指令:
<Location /trac/trac1>
[...]
Require user Customer1
</Location>
<Location /trac/trac2>
[...]
Require user Customer2
</Location>
尽管如果你有更多的跟踪,它是不切实际的。
b) 在 trac 中设置适当的权限。每个用户都可以“登录”所有 trac,但不能访问其中的任何内容。
删除用户的所有权限已认证并向适当的用户授予权限。例如:
trac-admin d:/repos/trac/trac1 permission remove authenticated *
trac-admin d:/repos/trac/trac2 permission remove authenticated *
trac-admin d:/repos/trac/trac1 permission add Customer1 TICKET_CREATE TICKET_MODIFY WIKI_CREATE WIKI_MODIFY
trac-admin d:/repos/trac/trac2 permission add Customer2 TICKET_CREATE TICKET_MODIFY WIKI_CREATE WIKI_MODIFY
保持 authz 和 trac 权限同步是另一个问题:)如果您要经常这样做,最好编写一些与您的环境完全匹配的自定义脚本来添加和删除权限。