给定一个组,我如何检索该组的Microsoft.TeamFoundation.Identity(以设置安全权限)

时间:2019-04-26 17:22:31

标签: azure-devops azure-devops-rest-api

TL; DR:如何获取团队组对象的身份?

据我了解,安全性Access Control Entries使用身份向用户和组授予和撤消权限。为了设置权限,我需要知道某个身份。浏览我的ACE时,我发现Team Groups被授予Microsoft.TeamFoundation.Identity引用,并且ACE记录类似于:

// grid: [ 100, 100 ]

可以从{ "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)的情况下如何检索该团队组的唯一身份。 Team objects确实可以通过[MyTeamProject]\\Contributors属性直接链接到我要访问的内容,但是我看不到任何与Groups匹配的东西。 Group对象确实具有IdentityUrl属性,但是不适用于descriptor这样的网址。

我需要进行什么API调用(或调用链)才能检索组的安全标识?

2 个答案:

答案 0 :(得分:0)

Sudo_Brendan,

我正在通过POC进行此工作,并认为这可能对您有所帮助。我正在使用Microsoft.VisualStudio.Services.WebApi通过IdentityHttpClient进行此操作。

我从这里拉了NuGet:https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/15.131.1

ReadIdentitiesAsync和ReadIdentityAsync是我用来获取描述符的方法。这个简单的代码示例使您可以将组添加到Azure DevOps中的团队。

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

添加到组

输入:https://spsprodeus23.vssps.visualstudio.com/ {organization} / _ apis / identities / {Descriptor} / Members / {id}

答案 1 :(得分:0)

不,您不使用Microsoft.VisualStudio.Services.WebApi。 IdentityHttpClient仅包含在旧的Client Api中。