2

ユーザーが特定のプロジェクトの「ビルドの開始」権限を持っているかどうかを確認する方法を探しています。

今のところ、VersionControlServer オブジェクトを使用して、プロジェクト内でのユーザーの有効な権限の文字列配列を返すことができることがわかっています。しかし、VersionControlServer で GetEffectivePermissions メソッドを実行すると、"ビルドの開始" と "ビルドの管理" のアクセス許可が、ユーザーのアクセス許可を一覧表示する配列に含まれません。

これは、ビルドのアクセス許可を制御しない VersionControlServer をクエリしているためだと思います (間違っていますか?)。

TFS 2008 API を使用して、ユーザーの有効な "ビルド関連" のアクセス許可を見つけるにはどうすればよいですか?

4

1 に答える 1

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レベルの深さしかないため(常にチームプロジェクトルートに保存されます)、これが問題になることはありません。

于 2009-07-21T17:02:50.487 に答える