Назад | Перейти на главную страницу

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

Я использую VirtualSVN + Trac-plugin в 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) Ограничение просмотра источника 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 - это совсем другая проблема :) Было бы лучше написать несколько пользовательских сценариев, точно соответствующих вашей среде, чтобы добавлять и удалять разрешения, если вы собираетесь делать это часто.