TFS API中的用户权限 - 开始构建,管理构建

问题描述:

我正在寻找一种方法来确定用户是否具有给定项目的“开始构建”权限。TFS API中的用户权限 - 开始构建,管理构建

截至目前,我知道VersionControlServer对象可用于返回项目内用户有效权限的字符串数组。但是,当我在VersionControlServer上运行GetEffectivePermissions方法时,“开始构建”和“管理构建”权限不包括在列出用户权限的阵列中。

我假设(不正确?),这是因为我查询的版本控制服务器,它不控制生成权限。

我如何通过TFS 2008 API找到用户有效的“构建相关”权限?

+0

哪个版本的TFS? 05或08? – RobS 2009-07-21 01:04:10

+0

正在使用的版本是TFS 2008. – dabuild 2009-07-21 03:34:35

不幸的是,Team Build没有像版本控制这样的成熟的客户端对象模型。 2008年情况好多了,但它仍然缺乏自己的安全API。所以,你必须水平*提供的服务器级的更基本的Web服务接口:

下面是PowerShell中快速演示:

# add me to the Build Services security group 
$tfs = Get-TfsServer njtfs -all 
$user = $tfs.gss.ReadIdentityFromSource($tfs.GSS_SearchFactor::AccountName, "rberg") 
$uri = $tfs.css.GetProjectFromName("Test-ConchangoV2").uri 
$role = $tfs.gss.ListApplicationGroups($uri) | ? { $_.displayname -match "Build" } 
$tfs.gss.AddMemberToApplicationGroup($role.Sid, $user.Sid) 

# explicitly give me the Administer Builders permission 
$ace = new-object $tfs.GSS_AccessControlEntry ADMINISTER_BUILD, $user.Sid, $false 
$objectId = [Microsoft.TeamFoundation.PermissionNamespaces]::Project + $Uri 
$tfs.AUTH.AddAccessControlEntry($objectId, $ace) 

# print build-related ACLs 
$tfs.AUTH.ReadAccessControlList($objectId) | 
    ? { $_.actionId -like "*build" } | 
    ft -auto ActionId, Deny, @{ 
     Label = "Name"; 
     Expression = { $tfs.gss.ReadIdentity($tfs.GSS_SearchFactor::Sid, $_.Sid, $tfs.GSS_QueryMembership::none).DisplayName } 
    } 

不幸的是,有了这个低水平l API没有“有效权限”的一站式购物。 Auth服务可以通过多个组成员身份解析应用于用户的各种ACE,以及​​父 - >子继承的有限形式,但我不认为它知道版本控制层次结构 - 只有“常见结构“(又名团队项目 - >区域&迭代)层次结构。幸运的是,构建权限的深度只有1级(始终存储在团队项目根目录中),因此这不应该成为您的问题。