我团队中的一些开发人员已经疯了......他们有时会删除文件。我被指派阻止他们这样做。 到目前为止,我尝试过追随(谷歌是我最好的朋友)
在“存储库访问规则”下,我已经
######################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 但不知道如何拥有两个不同的文件(Collabnet自己的文件之一,donno存储itz,其他作为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;
}
}
我首先尝试使用tags文件夹。
控制文件:access-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都很天真。请帮忙。 操作系统:红帽企业Linux服务器版本6.3(圣地亚哥) 关于Subversion Edge:版本:3.2.2
答案 0 :(得分:2)
SVN Edge可帮助您配置和管理包含二进制文件的标准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允许您通过Web浏览器将钩子脚本上载到存储库钩子文件夹中。如果钩子脚本需要配置文件,就像这里的情况一样,您也可以上传该文件。您只需根据需要修补挂钩,以便它可以找到SVN二进制文件以及您上载的配置文件。只有在内置的SVN访问规则允许具有写访问权限的人通过其检查后,钩子才会运行。
因此,您需要使用SVN访问规则授予用户写入权限,然后在他们尝试执行您不希望允许的操作时,取消写访问权。
答案 1 :(得分:2)
这是一个很好的问题。不可以.Subversion Repository控件只允许您指定是否有人可以读取存储库,或者读取并提交存储库。要获得更好的权限,您必须编写一个Subversion预提交钩子,允许用户修改但不删除文件/目录。如果只有人写过这样一个预先提交的钩子!
等一下!我写了这样一个pre-commit hook。
此特定挂钩允许以下权限:
svn cp
添加目录,但无法在添加后编辑该文件。这是专门为标签创建的。请注意,没有阻止读取访问权限的权限。这只能通过存储库访问控制来控制。毕竟,预提交挂钩只有在文件已经签出时才能工作。
可以通过用户组(包括LDAP组和Windows Active Directory组)设置这些权限,并且文件可以与Perl正则表达式或Ant globbing匹配。
钩子还可以检查禁止的文件名,设置正确的文件属性,以及是否正确设置了修订属性(包括提交消息svn:log
)。可以将字符串的值与正则表达式匹配。