Я хочу создать новую группу приложений в каждом командном проекте и предоставить права на нее.До сих пор я делал итерации по всем проектам и создавал группу, если она еще не создана:
static void Main( string[] args )
{
m_TfsServer = new TfsTeamProjectCollection(
new Uri( "http://server:port/vdir" ),
System.Net.CredentialCache.DefaultNetworkCredentials,
new UICredentialsProvider( ) );
m_TfsServer.EnsureAuthenticated( );
m_TfsSecurityService = m_TfsServer.GetService<IGroupSecurityService>( );
var structService = m_TfsServer.GetService<ICommonStructureService>( );
foreach ( var p in structService.ListAllProjects( ) )
{
string groupSid;
if ( !GroupExist( p.Uri, GroupName ) )
{
groupSid = m_TfsSecurityService.CreateApplicationGroup(
p.Uri,
GroupName,
GroupDescription );
}
else
{
groupSid = GetApplicationGroupSid( p.Uri, GroupName );
}
Identity userIdentity = m_TfsSecurityService.ReadIdentityFromSource(
SearchFactor.AccountName,
UserName );
if ( !m_TfsSecurityService.IsMember( groupSid, userIdentity.Sid ) )
{
m_TfsSecurityService.AddMemberToApplicationGroup(
groupSid,
userIdentity.Sid );
}
}
}
private static bool GroupExist( string projectUri, string groupName )
{
bool result = false;
Identity[] groups =
m_TfsSecurityService.ListApplicationGroups( projectUri );
foreach ( Identity group in groups )
{
result |= group.SecurityGroup && group.DisplayName.Equals( groupName );
}
return result;
}
private static string GetApplicationGroupSid(
string projectUri,
string groupName)
{
return m_TfsSecurityService.ListApplicationGroups( projectUri )
.Where( g => g.DisplayName.Equals( groupName ) )
.Select( g => g.Sid )
.First( );
}
Осталось только предоставить право «Просмотр информации уровня проекта» группе.,
[Редактировать]
Я нашел что-то для предоставления прав с помощью VersionControlService:
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection( ServerUri );
tfs.EnsureAuthenticated( );
var vcs = tfs.GetService<VersionControlServer>( );
//vcs.SetPermissions( new SecurityChange[] { } ); ???
Но я не нашел никакой документации, как предоставитьправа на группу, поэтому я даже не уверен, является ли это решение правильным.
[/ Edit]
Кто-нибудь сталкивался с управлением правами TFSили кто-нибудь, кто уже предоставил права через TFS API?