【问题标题】:How to customize Collabnet Subversion Edge repository access rules to forbid users from deleting files(no-delete)如何自定义 Collabnet Subversion Edge 存储库访问规则以禁止用户删除文件(不删除)
【发布时间】:2013-12-02 16:51:44
【问题描述】:

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

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

######################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;
    }
}

我先尝试了 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 都很天真。请帮忙。 操作系统:Red Hat Enterprise Linux Server 6.3 版(圣地亚哥) 关于 Subversion Edge:版本:3.2.2

【问题讨论】:

    标签: svn pre-commit-hook svn-hooks collabnet subversion-edge


    【解决方案1】:

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

    【讨论】:

    • 非常感谢的回答(尤其是那些链接)..一旦我成功了,我会标记答案[我现在的日程安排很紧.. :(]
    • 嗨,马克,我试过了,但在 SVN Edge 中找不到“上传挂钩脚本”的任何地方。我使用的是 Windows 版本
    【解决方案2】:

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

    等一下!我写了这样一个pre-commit hook

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

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

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

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

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

    【讨论】:

    • 嗨,大卫! 感谢您的回复。我已经编辑了问题中提到的 pre-commit-hook 脚本。但是我对 control.ini 文件的位置有点困惑。我通过 Subversion Edge 的 Web API 上传了这两个文件(与@MarkPhippard 建议的相同)。但它没有用。请检查脚本(有问题)并提出相应建议[如果您需要,我可以上传这两个文件]
    • 在示例预提交挂钩脚本中,实际代码是这样调用的: $HOOKS_DIR/pre-commit-kitchen-sink-hook.pl -t $TXN -svnlook /usr/bin/ svnlook -file $HOOKS_DIR/control.ini $REPOS 这意味着默认情况下它希望钩子在钩子文件夹中,这是 SVN Edge 上传的地方。检查您的预提交
    • 控制文件可以在任何地方。您必须将其位置作为参数之一传递给预提交挂钩。您可以通过 david@weintraub.name 与我联系,提供有关错误和问题的更多详细信息。 (我的电子邮件地址在 README.md 中)。我非常乐意帮助您使其正常工作。
    猜你喜欢
    • 2019-06-23
    • 2010-11-11
    • 2021-06-25
    • 2011-09-02
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    相关资源
    最近更新 更多