TFS API中的用户权限 - 启动构建,管理构建

时间:2009-07-21 00:52:09

标签: tfs team-build

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

截至目前,我知道VersionControlServer对象可用于返回项目中用户有效权限的字符串数组。但是,当我在VersionControlServer上运行GetEffectivePermissions方法时,“Start a Build”和“Administer a Build”权限不包含在列出用户权限的数组中。

我假设(错误?)这是因为我正在查询不控制构建权限的VersionControlServer。

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

1 个答案:

答案 0 :(得分:1)

不幸的是,Team Build没有像Version Control这样的完整客户端对象模型。它在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 }
    }

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