2013-11-19 10 views
0

Некоторые разработчики в моей команде сошли с ума ... они когда-то удаляют файл. Мне назначили, чтобы они не делали этого. До сих пор я попытался следующие (Google это мой лучший друг)Как настроить правила доступа репозитория Collabnet Subversion Edge, чтобы запретить пользователям удалять файлы (no-delete)

В разделе «Repository Правила доступа» Я

######################SVN Groups################### 
[groups] 
Admins:adm,bdm 
DevGrp:abc,bob,rob 
Choreograher:bob 
Database:abc 

##############Folder-Specific-Access-Rules######### 
[temp:/trunk/] 
@Admins=rw 
[temp:/trunk/applications/branches/development/internal/branches] 
@DevGrp=rw 
[temp:/trunk/applications/branches/development/choreographer/trunk] 
@Choreograher=rw 
[temp:/trunk/applications/branches/development/databse/trunk] 
@Database=rw 

Теперь мне нужно отменить удаление права из всех групп (кроме админов конечно) из весь svn. Я прочитал около https://github.com/qazwart/SVN-Precommit-Kitchen-Sink-Hook , но donno, как иметь два разных файла (один из собственного файла Collabnet, donno, где он сохранен, а другой как pre-commit-hook) для управления правилами доступа.

я просто попытался добавить new-pre-commit-hook.pl в мой список крюком, после изменения следующей информации

SVNLOOK_DEFAULT => '/opt/csvn/bin/svnlook', 
SVN_REPO_DEFAULT => '/opt/csvn/data/repositories/hooktest/', 

..... 

use constant {  # Control File Type (package Control) 
    FILE_IN_REPO => "R", 
    FILE_ON_SERVER => "/opt/csvn/data/repositories/hooktest/hooks/access-control.ini", 
}; 

..... 
use constant VALID_ACCESSES => qw(ro rw ao nd na); 
.... 
if ($case eq "ignore" ? $file_name =~ /$regex/i : $file_name =~ /$regex/) { 
    if ($access eq "rw") { 
    $permitted = 1; 
    } 
    elsif ($access eq "ro") { 
    $permitted = 0; 
    $description = $file_rule->Description; 
    } 
    elsif ($access eq "ao") { 
    $permitted = $change_type eq ADDED ? 1 : 0; 
    $description = $file_rule->Description if not $permitted; 
    } 
    elsif ($access eq "na") { 
    $permitted = $change_type ne ADDED ? 1 : 0; 
    $description = $file_rule->Description if not $permitted; 
    } 
    elsif ($access eq "nd") { 
    $permitted = $change_type ne DELETED ? 1 : 0; 
    $description = $file_rule->Description if not $permitted; 
    } 
} 

Я пытался с папкой теги первым.

File Control: доступ-Control.ini

#SVN Permission Control File 
##====================Legends====================## 
# Abbr. Description 
# ro  read-only 
# rw  read-write 
# ao  add-only 
# nd  no-delete 
# na  no-add 
##==============SVN Groups=======================## 
[group superadmins] 
users = adm,bdm 
[group developers] 
users = abc,bob,rob 
[group all] 
users = adm,bdm,abc,bob,rob 
##===========Folder Specific Permissions=========## 
[file] 
file =/tags/** 
access = ro 
users = @all 

[file] 
file =/tags/*/* 
access = ao 
users = @superadmins 

[file] 
file =/tags/** 
access = ro 
users = @superadmins 

Но это не сработало. Я наивна с perl, а также SVN. Пожалуйста помоги. ОС: Red Hat Enterprise Linux Server релиз 6.3 (Santiago) О Subversion Edge: Release: 3.2.2

ответ

2

СВН Край позволяет настраивать и управлять стандартный сервер Subversion, который включает в себя бинарные файлы. Функция правил доступа является частью самого Subversion как описано здесь:

http://svnbook.red-bean.com/en/1.7/svn.serverconfig.pathbasedauthz.html

Вы хотите использовать эту функцию, чтобы контролировать, кто может читать и писать в репозиторий. Это касается возможности Subversion.

Что вы хотите сделать, так это разбить операцию записи, чтобы контролировать, кто может удалить, что является просто одной из форм записи. Subversion позволяет сделать это, вставив крюк предварительной фиксации. Те, документируются здесь:

http://svnbook.red-bean.com/en/1.7/svn.reposadmin.create.html#svn.reposadmin.create.hooks

Похоже, вы нашли крючок, который может делать то, что вы хотите. SVN Edge позволяет загружать сценарии крюка в папку крючков репозитория через веб-браузер. Если скрипту hook нужен файл конфигурации, как и в данном случае, вы также можете загрузить этот файл. Вам просто нужно исправить крюк по мере необходимости, чтобы он мог найти двоичные файлы SVN, а также файл конфигурации, который вы загружаете. Крюк будет запускаться только ПОСЛЕ того, как встроенные правила доступа SVN позволили кому-то с доступом для записи пройти проверку.

Таким образом, вам необходимо предоставить доступ к записи для пользователей с использованием правил доступа SVN, а затем убрать доступ на запись, если они пытаются сделать то, что вы не хотите разрешать им делать.

+0

** Спасибо ** много за ответ (esp для этих ссылок). Я помету ответ, как только мне это удастся. [Am on very tight schedule rt now .. :(] – AlienNova

+0

Привет, Марк, я но я не могу найти нигде в SVN Edge, чтобы «загрузить скрипты hook». Я использую версию Windows –

+0

См. http://help.collab.net/topic/csvn/action/managehookscripts.html –

2

Это отличный вопрос. Нет. Элемент управления репозитория Subversion позволяет вам указывать, может ли кто-то читать репозиторий, или читать и делать коммиты в репозитории. Чтобы иметь более тонкие разрешения, вам нужно написать крюк предварительной фиксации Subversion, который позволит пользователям изменять, но не удалять файлы/каталоги. Если бы только кто-то написал такой крюк для предварительной фиксации!

Подождите, пожалуйста! Я написал такой pre-commit hook.

Данный крючок позволяет для следующих разрешений:

  • чтение-запись: Разрешить пользователю читать и вносить изменения в файл.
  • только для чтения: Запретить пользователю вносить какие-либо изменения в файл.
  • no-delete: Разрешить пользователям вносить изменения, но не удалять их.
  • add-only: Разрешить пользователю добавлять каталог через svn cp, но не может редактировать файл после его добавления. Это было специально создано с учетом тегов. не
  • нет добавьте: Разрешить пользователям вносить изменения (и даже удалить файл, но они не могут добавить этот файл

Обратите внимание, что нет никакого разрешения, что предотвращает доступ на чтение Это может управляться только.. через контроль доступа к репозиторию. В конце концов, крюк предварительной фиксации может работать только в том случае, если файл уже был извлечен.

Эти разрешения могут быть установлены с помощью групп пользователей (включая группы LDAP и группы Windows Active Directory) и файлы могут быть сопоставлены либо регулярными выражениями Perl, либо Ant globbing.

Крючок также может проверять наличие запрещенных имен файлов, заданы правильные свойства файла и правильно ли установлены свойства ревизии (включая сообщение фиксации, svn:log). Значения свойств могут быть сопоставлены с строками или регулярными выражениями.

+0

** Привет Дэвид! Спасибо за ответ. Я отредактировал сценарий pre-commit-hook, как указано в вопросе. Но я немного запутался в расположении файла control.ini. Я загрузил оба файла через веб-API Subversion Edge (так же, как предлагал @MarkPhippard), но это не сработало. Пожалуйста, проверьте скрипт (в вопросе) и предложите соответственно [я могу загрузить оба файла, если вам это нужно] – AlienNova

+0

В примере сценария перехвата с фиксацией, фактический код вызывается следующим образом: $ HOOKS_DIR /pre-commit-kitchen-sink-hook.pl -t $ TXN -svnlook/usr/bin/svnlook -file $ HOOKS_DIR/control.ini $ REPOS Это означает, что он ожидает, что крюк будет находиться в папке с крючками по умолчанию, в котором будет загружена загрузка SVN Edge. Проверьте свой pre-commit –

+0

Файл управления может быть где угодно. Вы должны передать свое местоположение в качестве одного из параметров для привязки до фиксации. Вы можете связаться со мной по адресу [email protected] с более подробной информацией об ошибках и вопросах. (Мой адрес электронной почты находится на README.md). Я буду более чем счастлив помочь вам заставить его работать. –