Разрешения пользователя в TFS API — запуск сборки, администрирование сборки

Я ищу способ узнать, есть ли у пользователя разрешение «Начать сборку» для данного проекта.

На данный момент я знаю, что объект VersionControlServer можно использовать для возврата строкового массива действующих разрешений пользователя в проекте. Но когда я запускаю метод GetEffectivePermissions на сервере VersionControlServer, разрешения «Начать сборку» и «Администрирование сборки» не включаются в массив, в котором перечислены разрешения пользователя.

Я предполагаю (ошибочно?), что это потому, что я запрашиваю VersionControlServer, который не контролирует разрешения на сборку.

Как мне найти действующие разрешения пользователя, связанные со сборкой, через API TFS 2008?


person dabulls    schedule 21.07.2009    source источник
comment
Какая версия ТФС? 05 или 08?   -  person RobS    schedule 21.07.2009
comment
Используемая версия — TFS 2008.   -  person dabulls    schedule 21.07.2009


Ответы (1)


К сожалению, в Team Build нет полноценной клиентской объектной модели, такой как система управления версиями. В 2008 году он НАМНОГО лучше, но ему все еще не хватает собственного API безопасности. Таким образом, вам нужно перейти на более простые интерфейсы веб-сервисов, предлагаемые на уровне сервера:

Вот краткая демонстрация в 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 нет универсального решения для «эффективных разрешений». Служба аутентификации может разрешать различные ACE, которые применяются к пользователю через членство в нескольких группах, а также ограниченную форму наследования родитель->потомок, но я не думаю, что она знает об иерархии управления версиями — только «общая структура » (он же «Командные проекты» -> «Области и итерации»). К счастью, разрешения на сборку имеют глубину всего 1 уровень (всегда хранятся в корневом каталоге Team Project), поэтому в вашем случае это не должно быть проблемой.

person Richard Berg    schedule 21.07.2009
comment
Это то, что я искал. Спасибо за демонстрацию Powershell. Объяснение стало намного легче усваиваться. - person dabulls; 23.07.2009