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 простым), это эффективный способ выполнения работы.