Subversion Authz - полный доступ ко всем, кроме одного - PullRequest
3 голосов
/ 10 августа 2011

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

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

[/]
* = rw   #employees
vendor_user = 

[/sub-repo]
vendor_user = rw

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

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

Ответы [ 2 ]

2 голосов
/ 30 ноября 2012

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

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

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

2 голосов
/ 11 августа 2011

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

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

[groups]
employees = user1,user2,user3

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

[/]
@employees = rw
vendor_user =

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

...