Для данной группы, как мне получить Microsoft.TeamFoundation.Identity группы (для установки разрешений безопасности) - PullRequest
0 голосов
/ 26 апреля 2019

TL; DR: Как получить идентификатор объекта группы группы?

В моем понимании, безопасность Записи контроля доступа используют удостоверения для предоставления и отзыва разрешений для пользователей и групп. Для того, чтобы установить разрешение на что-то, мне нужно знать, что это личность. Просматривая мои записи ACE, я обнаружил, что группам команд даны ссылки на Microsoft.TeamFoundation.Identity с записями ACE, похожими на:

{
  "Microsoft.TeamFoundation.Identity;X-X-X-XXXX...": {
    "descriptor": "Microsoft.TeamFoundation.Identity;X-X-X-XXXX...",
    "allow": 0
    "deny": 0
  }
}

Эти идентификационные данные могут быть запрошены из https://{organization}.vssps.visualstudio.com/_apis/Identities ... но я не знаю, как, учитывая групповую группу (например, [MyTeamProject]\\Contributors), как получить уникальную идентификационную информацию этой групповой группы. Командные объекты У меня есть прямая ссылка на то, что я ищу, со свойством IdentityUrl, но я не вижу ничего, что хорошо отображает группы. У объекта Group есть свойство descriptor, но это не работает для URL, таких как https://{organization}.vssps.visualstudio.com/_apis/Identities?descriptors={descriptor}.

Какой вызов API (или цепочку вызовов) мне нужно сделать для получения идентификатора безопасности группы?

1 Ответ

0 голосов
/ 26 апреля 2019

Sudo_Brendan,

Я сейчас прорабатываю POC и подумал, что это может вам помочь.Я использую Microsoft.VisualStudio.Services.WebApi для этого с IdentityHttpClient.

Я вытащил NuGet отсюда: https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/15.131.1

ReadIdentitiesAsync и ReadIdentityAsync - методы, которые я используюиспользуя, чтобы получить дескриптор.Этот простой пример кода позволяет добавлять группы в группу в DevOps Azure.

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

    public async Task AddGroupToTeam(WebApiTeam team, params string[] groups)
    {            
        var client = await GetConnectedClient<IdentityHttpClient>();
        var tasks = new List<Task>();

        foreach (var group in groups)
        {
            var result = await client.ReadIdentitiesAsync(IdentitySearchFilter.DisplayName, group);

            var teamIdentity = await client.ReadIdentityAsync(team.Id);
            var userIdentity = result.First();

            tasks.Add(client.AddMemberToGroupAsync(teamIdentity.Descriptor, userIdentity.Id));
        }

        Task.WaitAll(tasks.ToArray());
    }

ReadIdentitiesAsync, кажется, вызывает это:

GET: https://spsprodeus23.vssps.visualstudio.com/{organization}/_apis/Identities?searchFilter=DisplayName&filterValue={groupName}&options=None&queryMembership=None

ReadIdentityAsync, кажется, вызывает это:

GET:https://spsprodeus23.vssps.visualstudio.com/{organization}/_apis/Identities/{id}?queryMembership=None

Добавить в группу

PUT: https://spsprodeus23.vssps.visualstudio.com/{organization}/_apis/identities/{Descriptor}/Members/{id}

...