关于AZDO REST API设置ACL时部分身份权限提交的疑问
Azure DevOps ACL Set API:修改单个身份权限的正确方式
核心结论
- 直接提交仅包含目标身份的payload会删除所有未在payload中列出的现有身份权限,因为该API的官方明确说明是「提供的ACL的所有现有数据都将被覆盖」。
正确操作流程
- 获取完整ACL数据
调用对应token的Get Access Control Lists接口,拿到当前完整的ACL配置,包括acesDictionary里所有身份的权限、inheritPermissions等参数。 - 修改目标身份配置
在获取到的完整payload中,找到目标身份的条目,修改其allow/deny数值;如果是新增身份权限,则直接在acesDictionary中添加对应的条目。 - 提交完整payload
将修改后的完整ACL配置提交给Set Access Control Lists接口,确保所有需要保留的身份权限都包含在内。
示例操作
假设原ACL包含两个身份(如下方示例),现在需要修改身份S-1-1-1111...的allow值为63:
步骤1:获取原完整ACL
{ "inheritPermissions": true, "token": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx", "acesDictionary": { "Microsoft.TeamFoundation.Identity;S-1-1-1111xxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-x-x-x-x-1": { "descriptor": "Microsoft.TeamFoundation.Identity;S-1-1-1111.....", "allow": 31, "deny": 0 }, "Microsoft.TeamFoundation.Identity;S-2-2-2222xxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-x-x-x-x-2": { "descriptor": "Microsoft.TeamFoundation.Identity;S-2-2-2222.....", "allow": 31, "deny": 0 } } }
步骤2:修改目标身份权限
{ "inheritPermissions": true, "token": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx", "acesDictionary": { "Microsoft.TeamFoundation.Identity;S-1-1-1111xxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-x-x-x-x-1": { "descriptor": "Microsoft.TeamFoundation.Identity;S-1-1-1111.....", "allow": 63, "deny": 0 }, "Microsoft.TeamFoundation.Identity;S-2-2-2222xxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-x-x-x-x-2": { "descriptor": "Microsoft.TeamFoundation.Identity;S-2-2-2222.....", "allow": 31, "deny": 0 } } }
步骤3:提交修改后的完整payload
将上述修改后的完整配置提交给Set接口,即可完成目标身份权限更新,同时保留其他身份的原有权限配置。
内容的提问来源于stack exchange,提问作者SiBush
相关产品推荐
相关产品推荐

