如何通过Azure DevOps(ADO)API获取用户对仓库的权限?
获取Azure DevOps代码仓库用户权限的API方法
前置准备
- 生成个人访问令牌(PAT):需要至少包含
代码(读取)权限,生成路径:ADO组织设置 → 个人访问令牌 → 新建令牌。 - 收集必要信息:
- 组织名称(ADO域名前缀)
- 项目ID/项目名称
- 目标代码仓库ID(可从仓库页面URL获取,或通过
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories?api-version=7.1-preview.1接口批量获取) - 用户身份描述符(descriptor):通过用户邮箱/DisplayName查询获取,接口:
取返回结果中GET https://vssps.dev.azure.com/{organization}/_apis/identities?searchFilter=General&value={userEmailOrName}&api-version=7.1-preview.1descriptor字段值。
核心API调用
使用权限评估接口查询用户对指定仓库的最终有效权限:
GET https://dev.azure.com/{organization}/{project}/_apis/securitypermissions/permissionevaluation?api-version=7.1-preview.1
关键参数说明
securityNamespaceId:固定值2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87(对应代码仓库的安全命名空间)token:格式为repoV2/{projectId}/{repoId},替换为实际项目ID和仓库IDdescriptor:前面获取的用户身份描述符
请求示例
cURL 示例
curl -u :{yourPAT} "https://dev.azure.com/{orgName}/{projectName}/_apis/securitypermissions/permissionevaluation?securityNamespaceId=2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87&token=repoV2/{projectId}/{repoId}&descriptor={userDescriptor}&api-version=7.1-preview.1"
注:
{yourPAT}替换为你的个人访问令牌,冒号不可省略(用于Basic Auth的格式要求)
PowerShell 示例
$pat = "{yourPAT}" $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")) $uri = "https://dev.azure.com/{orgName}/{projectName}/_apis/securitypermissions/permissionevaluation?securityNamespaceId=2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87&token=repoV2/{projectId}/{repoId}&descriptor={userDescriptor}&api-version=7.1-preview.1" Invoke-RestMethod -Uri $uri -Headers @{Authorization = "Basic $base64AuthInfo"} -Method Get
返回结果解析
返回的JSON中核心字段说明:
allowedPermissions:用户被允许的权限位掩码(十进制)deniedPermissions:用户被拒绝的权限位掩码effectivePermissions:最终生效的权限位掩码(允许-拒绝的结果)
要将位掩码转换为可读权限名称,可调用安全命名空间详情接口获取对应关系:
GET https://dev.azure.com/{organization}/_apis/securitynamespaces/2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87?api-version=7.1-preview.1
返回的actions数组中,每个对象的bit对应位值,displayName是权限名称(例如:bit:1对应“读取”,bit:2对应“贡献”,bit:4对应“管理”等)。
注意事项
- API返回的是最终有效权限,包含继承自项目/组织的权限以及直接分配给仓库的权限
- 如果需要批量查询多个用户或仓库,可循环调用该接口,或使用批量权限评估接口(需更高权限)
内容的提问来源于stack exchange,提问作者user10434309
相关产品推荐
相关产品推荐

