Настройки авторизации на основе пути svnserve
Я использую svnserve 1.4 под управлением Windows 7. Я хочу контролировать права пользователей с помощью файла authz.
Я хочу дать разрешение "rw" для подпапки, пока корневая папка защищена от чтения. У меня есть большой репозиторий, и я хочу дать разрешения "rw" только для ограниченного подмножества файлов. Другие папки будут невидимы для пользователя.
Если я использую следующую конфигурацию, ничего не отображается:
[/root]
group1 =
[/root/A/new/Data]
group1 = rw
[/root/C/Ex/Files]
group1 = rw
Если я вместо этого использую:
[/]
group1 = rw
тогда все папки видны для "group1", а это не то, что мне нужно.
Другой вариант делает что-то вроде
[root/B]
group1 =
[root/c]
group1 =
для всех подпапок, которые не нужны для group1. Я бы предпочел не делать это так.
2 ответа
Я использую svnserve 1.4 под управлением Windows 7.
Просто быстро не то, что Subversion 1.4 больше не поддерживается. Вы можете обновить до версии 1.7.x или 1.6.x. Эти более поздние версии поддерживают отслеживание слияний, что очень удобно. Обновление существующего хранилища довольно просто.
Как уже отмечали другие, если у вас нет разрешения на чтение папки, у вас нет прав на чтение подпапок этой папки. Вы можете установить разрешение только на чтение для родительских папок, но если вы удалите чтение, пользователи не смогут увидеть подпапку, в которой вы хотите предоставить разрешение на чтение / запись.
Вы можете переосмыслить свой макет хранилища. Нет ничего необычного в том, чтобы предоставить доступ на чтение к хранилищу избранному набору людей. Например, вы не хотите, чтобы ваши продавцы читали ваш исходный код, но вы хотите, чтобы ваши разработчики. Моя обычная задача - предоставить разрешение на чтение / запись для каждого репозитория, а затем использовать ловушку перед фиксацией для управления способностями фиксации. Иногда каталог содержит материалы, которые вы даже не хотите, чтобы все разработчики видели (например, ваши закрытые ключи), и это должен видеть только небольшой набор разработчиков. В этом случае я делаю это отдельным хранилищем.
Не вся надежда потеряна. Вы можете поместить каталоги, к которым вы хотите, чтобы group1 обращался, в другую структуру каталогов ближе к корню хранилища. Тогда используйте svn:externals
в этот каталог вы не хотите, чтобы пользователи в группе 1 видели.
Например, настройте свой репозиторий следующим образом:
[/root]
group1=
[/A/new/Data]
group1=rw
[C/Ex/Files]
group1=rw
Затем положить набор svn:externals
на /root
включать A/new/Data
а также C/Ex/Files
когда вы оформляете заказ /root
,
WORD 'O WARNING: будьте осторожны при использовании svn:externals
, Если вы указываете их на кончик ветви или ствола, это svn:external
все равно будет меняться, даже если вы пометите /root
, Всегда используйте конкретную ревизию при использовании svn:externals
,
Обратите внимание, что если у пользователя нет доступа на чтение к папке, он не может получить доступ к чему-либо внутри этой папки. Без доступа на чтение у Subversion нет никакого способа узнать, есть ли в нем файлы или папки, для которых он должен проверить разрешения. Отказ в доступе на чтение рекурсивно скроет папку и все внутри нее.
Если вы оказались в ситуации, когда необходим этот тип детального контроля доступа, я настоятельно рекомендую переоценить ваш макет хранилища. Если вложенные ресурсы, как ваш /root
а также /root/A/new/Data
нужны такие дико разные разрешения, тогда вполне вероятно, что их отношения в репо не отражают их отношения в реальности. Часто такие вещи в конечном итоге будут реорганизованы в отдельные проекты (или даже в отдельные репозитории) вместо вложенных папок, и в результате большая часть детальной работы по управлению доступом станет значительно проще.
Если вы не можете реорганизовать свой репозиторий без нарушения скриптов сборки и т. Д., То вы можете рассмотреть возможность использования Subversion svn:externals
имущество. Вы можете перемещать содержимое /root/A/new/Data
в отдельный репозиторий и предоставьте group1 полный доступ к нему. Вы можете использовать svn:externals
перетащить новый путь к хранилищу в ваш /root
папка под тем же именем папки, чтобы те, кто имеет доступ к /root
увидеть то же самое, когда они делают svn checkout
, Этот вид рабочего процесса полезен, когда содержимое подпапки напоминает библиотеку, предоставляемую внешней группой. Вам необходимо предоставить команде библиотеки доступ к коду библиотеки (который они имеют, напрямую обращаясь к хранилищу библиотеки), но им не нужно иметь доступ к остальной части вашего кода.