Быстрый фон. Мы запускаем Subversion Server 1.6.5 (нет Apache, только сервер SVN) на компьютере с Windows без доступа к сети. Мы используем только TortoiseSVN и AnkhSVN, а для непрерывной интеграции мы используем командную строку клиента svn.
Хорошо, поэтому я поискал в сети и немного прочитал книгу SVN, и я не понимаю, почему эта пользовательская настройка не работает.
authz (файл авторизации SVN) содержимое:
### Sanitized version
[groups]
devUsers = user1
qaUsers = user2
[/]
@devUsers = r
@qaUsers = r
[/Dev/SourceCode]
@devUsers = rw
~devUsers =
### QA Projects
[/Dev/testCases]
@qaUsers = rw
~qaUsers =
Из того, что я прочитал, вы должны предоставить всем пользователям как минимум доступ для чтения к корню вашего репозитория. Хорошо. Это работает. Затем мой каталог / Dev / SourceCode должен быть доступен только для @devUsers, но по какой-то причине в репо-браузере TortoiseSVN @qaUsers
можно увидеть эту папку. Я предполагаю глобальный доступ для чтения на /
отменяет ~devUsers =
строка в файле authz? То же самое и с папкой / Dev / TestCases, которая должна быть доступна только для @qaUsers
, все же @devUsers
также можете просматривать эту папку. Это одна из моих проблем.
Однако основная проблема заключается в том, что подпапки / Dev / SourceCode доступны только для чтения. Я знаю это, потому что, когда я пытаюсь проверить что-то в подпапке, он говорит, что авторизация не удалась. Однако в корневой папке, если вы регистрируете файл, он работает нормально.
Я предполагаю, что это /
доступ только для чтения, снова переопределяющий вещи. Означает ли это, что каждой подпапке должны быть предоставлены явные разрешения rw? Можно ли с этого момента сказать, что использовать разрешения текущей родительской папки? То есть разрешения / Dev / SourceCode. Это кажется действительно неудобным, если вы хотите предоставить разрешения rw всем подпапкам, когда есть много подпапок.
Каскадирование разрешений должно работать так, как вы ожидаете; нет необходимости в разрешениях для каждого каталога. Вам нужно только указать более конкретные пути, чтобы переопределить разрешения от родителя, как вы это делаете.
Я не знаком с ~groupname
синтаксис. Вы явно хотите, чтобы это означало отрицание (пользователи не в группе), но я не уверен, что это поддерживается. Попробуйте что-то вроде этого (ваши первые два раздела для групповых определений и корневого доступа одинаковы):
[/Dev/SourceCode]
@devUsers = rw
@qaUsers =
[/Dev/testCases]
@qaUsers = rw
@devUsers =
Это должно сработать, хотя мне грустно лишение ваших разработчиков доступа к тестовым примерам.
РЕДАКТИРОВАТЬ: Поскольку вы пробовали это, и это не работает ... может быть, попробуйте изменить порядок? Предполагается, что соответствие будет происходить от наиболее специфичного до наименее специфичного, поэтому порядок не имеет значения, но я бы по крайней мере попытался поместить их в файл раньше, чем разрешения [/]. Если это имеет значение, я бы заподозрил ошибку в вашей серверной версии.
Полностью отделите идею (идеи) от моего другого ответа:
... вы уверены, что в вашем определении [/ Dev / testCases] нет опечатки (например, case)? (Вы в Windows: я знаю, что Windows будет отображать вещи как Dev, если они на самом деле называются DEV, например ... но SVN, вероятно, позаботится)
... также, вы уверены, что это не должно быть [/ trunk / Dev / testCases] или что-то в этом роде?
Когда я увидел ваш файл авторизации, я подумал: «Не пропали ли имена репозиториев в объявлениях пути?»
Под этим я подразумеваю,
[/Dev/SourceCode]
@devUsers = rw
@qaUsers =
должен выглядеть,
[<repo-name>:/Dev/SourceCode]
@devUsers = rw
@qaUsers =
или, если `Dev ' является название репозитория,
[Dev:/SourceCode]
@devUsers = rw
@qaUsers =
Я использую apache для наших репозиториев, но синтаксис выглядит одинаково, будь то httpd или svnserve: Авторизация на основе пути
Надеюсь, это поможет.
Спасибо,
Закари