Как предоставить доступ только для чтения ко всем групповым проектам TFS группе пользователей? - PullRequest
4 голосов
/ 01 ноября 2011

Я вижу из ответа на Как добавить группу Windows как «Читатели» для всех проектов в коллекции TFS 2010? , что это необходимо сделать вручную для всех существующих проектов.

есть инструмент командной строки, который можно использовать для этого?Я знаю о программе TfsSecurity , но моя попытка сделать это для одного командного проекта не сработала.


Что я сделал для одного командного проекта:

  1. Я создал «[DefaultCollection] \ All Project только для чтения пользователей» как группу уровня коллекции, содержащую одну группу Active Directory в качестве члена.
  2. Затем я попытался добавить доступ для чтения кпроект для этой группы:

tfssecurity / collection: http://tfs:8080/tfs/defaultcollection / a + Project vstfs: /// Classification / TeamProject / guid GENERIC_READ "[DefaultCollection] \ All Project Read-Только пользователи "ALLOW

Это добавило ACL для этой группы в командный проект, но эта группа не появилась в диалоговом окне" Безопасность "для командного проекта.

ЧтоЯ хотел сделать, чтобы дать этой группе тот же доступ, что и для группы «Читатели» для командных проектов.

Ответы [ 2 ]

8 голосов
/ 01 ноября 2011

Вот скрипт powershell для итерации по каждому командному проекту в вашей коллекции, получения группы Readers и добавления SID.

# load the required dll
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")

function get-tfs
{
    param(
    [string] $serverName = $(throw 'serverName is required')
    )

    $propertiesToAdd = (
        ('VCS', 'Microsoft.TeamFoundation.VersionControl.Client', 'Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer'),
        ('WIT', 'Microsoft.TeamFoundation.WorkItemTracking.Client', 'Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore'),
        ('CSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.ICommonStructureService'),
        ('GSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.IGroupSecurityService')
    )

    [psobject] $tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName)
    foreach ($entry in $propertiesToAdd) {
        $scriptBlock = '
            [System.Reflection.Assembly]::LoadWithPartialName("{0}") > $null
            $this.GetService([{1}])
        ' -f $entry[1],$entry[2]
        $tfs | add-member scriptproperty $entry[0] $ExecutionContext.InvokeCommand.NewScriptBlock($scriptBlock)
    }
    return $tfs
}
#set the TFS server url
[psobject] $tfs = get-tfs -serverName http://YourTfsServer:8080/tfs/YourColleciton


$items = $tfs.vcs.GetAllTeamProjects( 'True' )
    $items | foreach-object -process { 
    $proj = $_
    $readers = $tfs.GSS.ListApplicationGroups($proj.Name) | ?{$_.DisplayName -eq 'Readers' }

    $tfs.GSS.AddMemberToApplicationGroup($readers.Sid, 'TheSidToTheGroupYouWantToAdd')
}
5 голосов
/ 07 сентября 2016

Мой подход основан на том факте, что разрешения TFS наследуются, если явно не отказано.

Чтобы создать группу пользователей, которая будет автоматически получать доступ с правами только на чтение ко всем существующим и будущим проектам, выполните следующие действия:

  1. Создание новой группы безопасности на уровне коллекции проекта. Вы можете сделать это в Visual Studio с помощью меню «Настройки коллекции Team / Team Project / Членство в группе».

  2. Добавить новую группу в качестве члена группы «Администраторы коллекций проектов». Это предоставит доступ ко всем проектам в коллекции, включая фьючерсные.

  3. Ограничение разрешений новой группы для удаления унаследованных разрешений администратора. Чтобы разрешить доступ только для чтения, запретите все разрешения, кроме «Создание рабочей области», «Просмотр ресурсов сборки» и «Просмотр информации на уровне коллекции».

Пользователи этой группы будут иметь доступ на чтение к исходному коду, рабочим элементам и определениям сборки всех проектов в коллекции.

...