Subversion Authz - Полный доступ ко всем, кроме одного

У меня есть сервер subversion для клиента, который использует базу данных MySQL для аутентификации сотрудников, и AuthUserFile (htpasswd) для аутентификации других пользователей (поставщиков) в их хранилище.

Мне нужно предоставить полный доступ к сотрудникам * = rw и доступ только к поддереву для поставщиков. (Что-то вроде этого):

[/]
* = rw   #employees
vendor_user = 

[/sub-repo]
vendor_user = rw

К сожалению, дизайн аутентификации SVN кажется каскадным * = rw вплоть до всего, несмотря на более строгие правила, такие как vendor_user =

Если у кого-то есть совет, я буду глубоко признателен!

2 ответа

Решение

Я не думаю, что это возможно, но даже если бы это было так, я не могу сказать, что рекомендую делать что-то подобное. С точки зрения безопасности крайне опасно предоставлять общий доступ для чтения / записи, а затем выборочно удалять разрешения. Например, что если вы забудете удалить разрешения у недавно добавленного поставщика?

Возможно, вы могли бы определить группу "сотрудники":

[groups]
employees = user1,user2,user3

Тогда вы можете просто пойти:

[/]
@employees = rw
vendor_user =

Также: вероятно, было бы целесообразно написать скрипт для генерации / поддержки списка. Поскольку все пользователи перечислены в базе данных, вы можете сделать запрос к базе данных с помощью сценария и сгенерировать новый список доступа по мере необходимости.

Группы, безусловно, путь, но у вас все еще есть проблема. Если вашему пользователю запрещено видеть корневую папку, он не сможет получить доступ к той подпапке, которую вы хотите видеть.

По этой причине я структурирую репо с минимумом значимых папок на верхнем уровне, например:

trunk/
    client/
    services/
    api/

Затем настройте разрешения, используя общий доступ для чтения, т.е.

[groups]
core = user1, user2, user3
client = user4

[repo:/]
* = r

[repo:/trunk/client]
@core = rw
@client = rw

[repo:/trunk/services]
@core = rw
@client =

[repo:/trunk/api]
@core = rw
@client = r

Джаред прав, что в этом есть свои риски, и вы должны быть осторожны, чтобы гарантировать, что ваши пользователи не будут удалять файлы в любом месте, где они не должны (уничтожение файлов - это боль, поэтому я использую чтение только для основных пользователей в целом), но пока Вы аккуратно настроили репо (например, зеркальное отображение структуры верхнего уровня ствола под ветвями, чтобы сохранить файл authz простым), это эффективный способ выполнения работы.

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