trac игнорирует настройки авторизации svn
Я использую VirtualSVN + Trac-плагин для Windows для мульти-проектов. Я настроил пользователей и группы в VirtualSVN, чтобы только авторизованные пользователи / группы имели доступ к указанному ресурсу.
Например:
- Customer1 может получить доступ к Repository1 и Trac1
- Customer2 может получить доступ к Repository2 и Trac2
- Аноним не может получить доступ к любому хранилищу SVN.
В моей системе после входа в систему 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 ответ
Этот вопрос можно разделить на две части:
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-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 - это совсем другая проблема:) Было бы лучше написать несколько пользовательских сценариев, точно соответствующих вашей среде, для добавления и удаления разрешений, если вы собираетесь делать это много.