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调用(或调用链)才能检索组的安全标识?
答案 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中。