Предоставить права на пользовательскую группу приложений TFS - PullRequest
3 голосов
/ 21 ноября 2011

Я хочу создать новую группу приложений в каждом командном проекте и предоставить права на нее.До сих пор я делал итерации по всем проектам и создавал группу, если она еще не создана:

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?

1 Ответ

0 голосов
/ 08 декабря 2011

Не совсем то, что вы просите, но оно может быть достаточно похоже, чтобы вы начали.

http://blogs.microsoft.co.il/blogs/shair/archive/2009/02/03/tfs-api-part-12-set-security-for-area-iteration.aspx

...