Я использую VirtualSVN + Trac-plugin в Windows для работы с несколькими проектами. Я настроил пользователей и группы в VirtualSVN, так что только авторизованные пользователи / группы могут получить доступ к указанному ресурсу.
Например:
В моей системе после входа в систему Customer2 он может получить доступ к Repository2, Trac2 но также Trac1. Это не так.
Часть конфигурации apache для svn
<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>
Часть конфигурации apache Trac
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) Ограничение просмотра источника svn с помощью trac, как сказано в файле authz
Вы должны указать trac, где находится файл authz.
Отредактируйте файл trac.ini в d: /repos/trac/tracX/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>
Хотя это непрактично, если у вас больше 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 - это совсем другая проблема :) Было бы лучше написать несколько пользовательских сценариев, точно соответствующих вашей среде, чтобы добавлять и удалять разрешения, если вы собираетесь делать это часто.