如何向一组用户授予对所有TFS团队项目的只读访问权限?

时间:2011-11-01 01:55:19

标签: security tfs tfs2010

我从How to add Windows group as "Readers" to all projects in TFS 2010 collection?的答案中看到,必须手动完成所有现有项目。

是否有可用于执行此操作的命令行工具?我知道TfsSecurity程序,但我尝试为单个团队项目执行此操作不起作用。


我为一个团队项目做了什么:

  1. 我创建了“[DefaultCollection] \所有项目只读用户”作为包含单个Active Directory组作为成员的集合级别组。
  2. 然后我尝试为该组的项目添加读取权限:
  3.   

    tfssecurity / collection:http://tfs:8080/tfs/defaultcollection / a + Project vstfs:/// Classification / TeamProject / guid GENERIC_READ“[DefaultCollection] \所有项目只读用户”允许

    这确实为团队项目添加了该组的ACL,但该组未出现在团队项目的“安全”对话框中。

    我想要做的是为该团队提供与团队项目的“读者”组相同的访问权限。

2 个答案:

答案 0 :(得分:8)

这是一个powershell脚本,用于迭代集合中的每个团队项目,获取Readers组并添加SID。

# load the required dll
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")

function get-tfs
{
    param(
    [string] $serverName = $(throw 'serverName is required')
    )

    $propertiesToAdd = (
        ('VCS', 'Microsoft.TeamFoundation.VersionControl.Client', 'Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer'),
        ('WIT', 'Microsoft.TeamFoundation.WorkItemTracking.Client', 'Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore'),
        ('CSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.ICommonStructureService'),
        ('GSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.IGroupSecurityService')
    )

    [psobject] $tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName)
    foreach ($entry in $propertiesToAdd) {
        $scriptBlock = '
            [System.Reflection.Assembly]::LoadWithPartialName("{0}") > $null
            $this.GetService([{1}])
        ' -f $entry[1],$entry[2]
        $tfs | add-member scriptproperty $entry[0] $ExecutionContext.InvokeCommand.NewScriptBlock($scriptBlock)
    }
    return $tfs
}
#set the TFS server url
[psobject] $tfs = get-tfs -serverName http://YourTfsServer:8080/tfs/YourColleciton


$items = $tfs.vcs.GetAllTeamProjects( 'True' )
    $items | foreach-object -process { 
    $proj = $_
    $readers = $tfs.GSS.ListApplicationGroups($proj.Name) | ?{$_.DisplayName -eq 'Readers' }

    $tfs.GSS.AddMemberToApplicationGroup($readers.Sid, 'TheSidToTheGroupYouWantToAdd')
}

答案 1 :(得分:5)

我的方法基于以下事实:除非明确拒绝,否则继承TFS权限。

要创建一个将自动访问所有现有项目以及期货项目的只读权限的用户组,请按照以下步骤操作:

  1. 在项目集合级别创建新的安全组。您可以使用"团队/团队项目集合设置/组成员资格"在Visual Studio中执行此操作。菜单。

  2. 将新群组添加为"项目收藏管理员"组。这将授予对集合中所有项目的访问权限,包括期货项目。

  3. 限制新组的权限以删除继承的管理员权限。要强制进行只读访问,请拒绝所有permisisons,除了"创建工作区","查看构建资源"和"查看集合级信息"。

  4. 该组的用户将具有对集合中所有项目的源代码,工作项和构建定义的读访问权。