2015-03-12 11 views
-1

У меня есть svn-репозиторий, использующий authz для управления доступом. Структура выглядит следующим образом:Ветвительная директория с частичным доступом для чтения

├── branches 
│   └── bob 
├── tags 
└── trunk 
    └── A 
     ├── B 
     │   └── README.txt 
     └── README.txt 

Пусть AuthZ предоставляет пользователю доступ к каталогу A но не B читать, и он терпит неудачу при попытке разветвляются A:

[hidden]$ svn copy A ^/branches/bob/A1 -m 'Branching A to branches/bob/A1' 
Adding copy of  A 
svn: E220001: Commit failed (details follow): 
svn: E220001: Access denied 

журнала The Svnserve говорит

Authorization Failed recursive read /trunk/A 

Почему у svn есть это ограничение и есть способ обойти? Почему он не игнорирует B при ветвлении, точно так же, как делать кассу?

Если это оказалось невозможным, тогда какой лучший рабочий процесс для svn с authz? Похоже, ветвление не разрешено, единственный способ - все, кто работает на багажнике, но это слишком глупо.

+0

Возможно, из-за того, что предполагается, что правильная ветвь ИМО должна содержать все от источника, даже если пользователь, пытающийся вступить в ветвь, не имеет доступа к нему, поскольку они предположительно «А» будут разбиты без содержимого 'B', и это вызывается при попытке слияния' bob/A1' обратно в '/ trunk/A'. – prodigitalson

+0

@prodigitalson, IMO, если это проблема A будет разбита без B, тогда svn checkout также следует запретить. –

+0

[Прочитайте последний блок боковой панели в нижней части страницы. Это объясняет это.] (Http://svnbook.red-bean.com/en/1.7/svn.serverconfig.pathbasedauthz.html) – prodigitalson

ответ

1

Первоначальная реализация authz SVN не проверила все поддеревья на копии, но объявление затем вышли на адрес this security hole.

Итак, вывод заключается в том, что authz SVN не был разработан с самого начала, рано или поздно вошло много хакерских и грязных исправлений, что в конечном итоге сделало ваш случай использования неподдерживаемым. ИМХО хорошая реализация должна просто отслеживать, откуда была скопирована ветка, и проверить authz источника.

Я согласен, что ваш прецедент полностью действителен, и Perforce поддерживает управление на основе пути довольно хорошо. К сожалению, вы не можете сделать это в svn. Вы можете переключиться на Perforce или дождаться их до improve authz.

0

У вас есть разрешение на запрет на поднод B для этого пользователя и запрет разрешений отменяет права на чтение.

Когда ветвление A, B невозможно пропустить (оно находится внутри A и, насколько известно или знает SVN, это часть его). Вот почему вы не можете этого сделать. На самом деле это хорошо, что это мешает вам, поскольку вы обычно не хотите, чтобы ветка пропускала папку из источника.

Не должно быть обходного пути для этого, это поведение имеет смысл. Для того, чтобы иметь действие филиальную успеха, вам необходимо либо:

  • движение B за пределами
  • дают пользователю доступ к А, и все, что под ним

Я понимаю, что могут быть случаи, когда это расстраивает, но если B - это то, что не зависит от A, или если кто-то, кто работает на A, не заботится о B или не нуждается в доступе к B - в таком случае B не должен быть действительно внутри A.

+0

Я не согласен с вашей логикой. Вполне возможно, что B тесно связан с A и, следовательно, с точки зрения логики и обслуживания, плохо переносить B из A. С другой стороны, B может быть некоторой факультативной динамически загруженной библиотекой A, так что пользователи без доступа к B могут все еще проверять/разветвлять A и работать с ним, строить его и тестировать основную часть A. Подводя итог, это вполне допустимый прецедент, когда A может работать без B, но B действительно является частью из A, разделял много вещей с помощью A, таких как код, скрипты сборки, тесты, а значит, плохая практика разделения B. –

+0

Это не моя логика, а таковая Subversion. Вы пытаетесь использовать Subversion. Вы нашли сценарий использования, который не работает с ветвлением. – Lucius

+0

Тогда где официальный источник говорит, что это логика svn? Где официальный источник говорит, что svn не поддерживает ветвление каталога, содержащего подкаталог, защищенный authz, потому что «все, что защищено authz, не является частью его родителя, поэтому не должно быть внутри родителя»? Если эта логика является официальной логикой svn, почему svn поддерживает authz для подкаталогов в первую очередь? –