【问题标题】:User Permissions in TFS API - Start a Build, Administer a BuildTFS API 中的用户权限 - 开始构建、管理构建
【发布时间】:2016-02-18 23:30:35
【问题描述】:

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

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

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

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

【问题讨论】:

  • 哪个版本的 TFS? 05 还是 08?
  • 使用的版本是 TFS 2008。

标签: tfs tfsbuild


【解决方案1】:

不幸的是,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 }
    }

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

【讨论】:

  • 这就是我要找的。感谢 Powershell 演示。它使解释更容易理解。
猜你喜欢
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
相关资源
最近更新 更多