提问人:John Saunders 提问时间:11/1/2011 最后编辑:CommunityJohn Saunders 更新时间:9/7/2016 访问量:11666
如何向一组用户授予对所有 TFS 团队项目的只读访问权限?
How to Grant Read-Only Access to All TFS Team Projects to a Group of Users?
问:
我从如何将 Windows 组作为“读者”添加到 TFS 2010 集合中的所有项目?的答案中看到,必须为所有现有项目手动完成此操作。
是否有可用于执行此操作的命令行工具?我知道 TfsSecurity 程序,但我尝试为单个团队项目执行此操作没有奏效。
我为一个团队项目做了什么:
- 我将“[DefaultCollection]\All Project Read-Only Users”创建为包含单个 Active Directory 组作为成员的集合级别组。
- 然后,我尝试为该组添加对项目的读取访问权限:
tfssecurity /collection:http://tfs:8080/tfs/defaultcollection /a+ 项目 vstfs:///Classification/TeamProject/guid GENERIC_READ“[DefaultCollection]\All 项目只读用户”允许
这确实将该组的 ACL 添加到团队项目中,但该组未显示在团队项目的“安全性”对话框中。
我想做的是为该组提供与团队项目的“读者”组相同的访问权限。
答:
下面是一个 powershell 脚本,用于循环访问集合中的每个团队项目,获取“读者”组并添加 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')
}
我的方法基于这样一个事实,即除非显式拒绝,否则 TFS 权限是继承的。
若要创建一个用户组,该用户组将自动以只读权限访问所有现有项目以及未来的项目,请执行以下步骤:
在项目集合级别创建新的安全组。可以在 Visual Studio 中使用“团队/团队项目集合设置/组成员身份”菜单执行此操作。
将新组添加为“项目集合管理员”组的成员。这将授予对集合中所有项目的访问权限,包括期货项目。
限制新组的权限以删除继承的管理员权限。若要强制只读访问,请拒绝除“创建工作区”、“查看生成资源”和“查看集合级别信息”之外的所有权限。
此组的用户将具有对集合中所有项目的源代码、工作项和生成定义的读取访问权限。
评论