TL; DR:我如何获得团队组对象的身份?
根据我的理解,安全性Access Control Entries使用Identities授予和撤消对用户和组的权限。为了设置某事物的许可,我需要知道某事物的身份。在浏览我的ACE时,我发现Team Groups被赋予了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
)中检索如何检索该团队组的唯一身份。 Team objects与IdentityUrl
属性有直接联系,但我没有看到任何可以很好地映射群组的内容。 Group对象确实具有descriptor
属性,但这不适用于像https://{organization}.vssps.visualstudio.com/_apis/Identities?descriptors={descriptor}
这样的网址。
为了检索组的安全身份,我需要做什么API调用(或调用链)?
Sudo_Brendan,
我现在正在通过这个POC工作,并认为它可能对你有所帮助。我正在使用Microsoft.VisualStudio.Services.WebApi与IdentityHttpClient一起执行此操作。
我从这里拉出了NuGet:https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/15.131.1
ReadIdentitiesAsync和ReadIdentityAsync是我用来获取描述符的方法。这个简单的代码示例允许您将组添加到Azure DevOps中的团队。
读取身份异步的重载允许更高级的搜索和过滤,因此您可以查找单个用户的电子邮件地址。希望这可以帮助。
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}