2012-07-18 62 views
1

开发团队使用Subversion's locking feature和带Active Directory身份验证的VisualSVN服务器(Integrated Windows AuthenticationBasic Authentication)可能需要将除管理员以外的任何人限制为steal locks如何允许使用VisualSVN Server仅锁定特定的Active Directory域组?

这样的任务可以通过pre-lock hook来实现。但是,由于身份验证依赖于Active Directory用户和组,编写这样的脚本可能有点棘手。

此外,在某些AD用户的操作必须由挂接脚本根据其AD域组成员身份进行不同处理时,还可能存在其他情况。

是否有任何示例显示如何使用Subversion钩子检查AD域组成员身份?

回答

1

您可以使用下面提供的示例PowerShell预锁钩子脚本检查AD组成员身份。

lock.ps1预 PowerShell脚本检查用户是否是管理员 Active Directory组的成员,并且拒绝,如果用户不是该组成员的窃取锁。

把这两样预lock.bat预lock.ps1到你的资料库“钩子”的文件夹,例如C:\Repositories\repository\hooks\

预lock.ps1

# Function check if $user is a member of $group 
function Check-GroupMembership 
{ 
    param([string]$group, [string]$user) 

    $server = get-content env:COMPUTERNAME 
    $query = [ADSI]("WinNT://$server/$group,group") 

    $ulist = $query.psbase.invoke("Members") |` 
      %{$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)} 

    $ulist -contains $user 
} 

# Store hook arguments into variables with mnemonic names 
$repos  = $args[0] 
$path  = $args[1] 
$user  = $args[2] 
$comment = $args[3] 
$steallock = $args[4] 

# Build path to svnlook.exe 
$svnlook = "$env:VISUALSVN_SERVER\bin\svnlook.exe" 

# Get the lock description 
$lockdescr = (&"$svnlook" lock $repos $path) 

# Find owner name 
foreach ($str in $lockdescr) 
{ 
    if ($str.StartsWith("Owner: ")) 
    { 
    $owner = $str.Substring(7) 

    # We find lock owner's name and it is not the user name 
    if ($owner -ne "" -and $owner -ne $user) 
    { 
     # If the $user is a member of 'Administrators' 
     # group allow to steal the lock 
     if (-not (Check-GroupMembership "Administrators" $user)) 
     { 
     [Console]::Error.WriteLine("Error: $path already locked by $owner.") 
     exit 1 
     } 
    } 

    exit 0 
    } 
} 

exit 0 

预lock.bat

@echo off 
set PWSH=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe 
%PWSH% %1\hooks\pre-lock.ps1 %1 %2 %3 %4 %5 
if errorlevel 1 exit %errorlevel% 
+2

这是更好地使用VISUALSVN_SERVER环境变量获得路径svnlook.exe到与x64 OS兼容。即$ svnlook =“$ env:VISUALSVN_SERVER \ bin \ svnlook.exe” – 2012-07-18 13:24:30

+0

谢谢!我已经调整了示例代码以利用%VISUALSVN_SERVER%环境变量。 – bahrep 2012-07-18 13:34:56

相关问题