0

我团队中的一些开发人员发疯了……他们有时会删除文件。我被指派阻止他们这样做。到目前为止,我尝试关注(谷歌是我最好的朋友)

在“存储库访问规则”下,我已经

######################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 自己的文件之一,不知道 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;
    }
}

我首先尝试使用标签文件夹。

控制文件: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 都很天真。请帮忙。操作系统:Red Hat Enterprise Linux Server 版本 6.3 (Santiago) 关于 Subversion Edge:版本:3.2.2

4

2 回答 2

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 访问规则授予用户写入权限,然后在他们尝试执行您不希望他们执行的操作时取消写入权限。

于 2013-12-04T21:11:44.883 回答
2

这是一个很好的问题。不可以。Subversion Repository 控件仅允许您指定是否有人可以读取存储库,或者读取并提交到存储库。要获得更好的权限,您必须编写一个 Subversion 预提交挂钩,允许用户修改,但不能删除文件/目录。要是有人写了这样一个预提交钩子就好了!

等一等!我写了这样一个预提交钩子

这个特定的钩子允许以下权限:

  • read-write:允许用户读取并提交对文件的更改。
  • 只读:防止用户对文件进行任何更改。
  • no-delete:允许用户进行更改,但不删除文件。
  • add-only:允许用户通过 来添加目录svn cp,但添加后无法编辑文件。这是专门在考虑标签的情况下创建的。
  • no-add:允许用户进行更改(甚至删除文件,但他们不能添加此文件。

请注意,没有阻止读取访问的权限。这只能通过存储库访问控制来控制。毕竟,预提交钩子只有在文件已经被签出的情况下才能工作。

这些权限可以通过用户组(包括 LDAP 组和 Windows Active Directory 组)设置,文件可以匹配 Perl 正则表达式或 Ant globbing。

该钩子还可以检查被禁止的文件名、设置了正确的文件属性以及是否正确设置了修订属性(包括提交消息svn:log)。属性的值可以与字符串或正则表达式匹配。

于 2013-12-04T22:08:29.973 回答