trac игнорирует настройки авторизации svn

Я использую VirtualSVN + Trac-плагин для Windows для мульти-проектов. Я настроил пользователей и группы в VirtualSVN, чтобы только авторизованные пользователи / группы имели доступ к указанному ресурсу.

Например:

  1. Customer1 может получить доступ к Repository1 и Trac1
  2. Customer2 может получить доступ к Repository2 и Trac2
  3. Аноним не может получить доступ к любому хранилищу 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 - это совсем другая проблема:) Было бы лучше написать несколько пользовательских сценариев, точно соответствующих вашей среде, для добавления и удаления разрешений, если вы собираетесь делать это много.

Другие вопросы по тегам