如何通过Azure CLI或REST API移除项目所有仓库的Contributors安全组
移除Azure DevOps项目所有仓库中安全组权限的方法(以Contributors组为例)
仓库权限设置界面说明
项目中仓库权限的配置入口:项目 → Repos → 权限,找到目标安全组(如Contributors)即可查看/修改权限,界面示例如下:
方法一:使用Azure CLI移除权限
步骤1:获取目标安全组的Descriptor
先获取Contributors组的唯一标识(descriptor),代码如下:
# 配置变量 $orgname = "你的组织名称" $prjname = "你的项目名称" $groupName = "Contributors" # 获取安全组descriptor $subject = az devops security group list ` --org "https://dev.azure.com/$orgname/" ` --project "$prjname" ` --subject-types vssgp ` --query "graphGroups[?principalName=='$groupName'].descriptor | [0]" ` --output tsv
步骤2:移除项目所有仓库的权限
Git仓库权限对应的Namespace ID为固定值 2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87,你可以通过两种方式移除权限:
方式A:重置权限(清除所有自定义权限,继承上级设置)
$namespaceId = "2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87" $projectid = az devops project show --org "https://dev.azure.com/$orgname/" --project "$prjname" --query id --output tsv # 重置项目下所有Git仓库的权限 az devops security permission reset ` --org "https://dev.azure.com/$orgname/" ` --id $namespaceId ` --subject $subject ` --token "repoV2/$projectid"
方式B:直接清除权限位(覆盖现有权限为无)
如果需要彻底清除该组在仓库的所有权限(不继承),可以使用update命令并设置--allow-bit 0且关闭合并:
az devops security permission update ` --org "https://dev.azure.com/$orgname/" ` --id $namespaceId ` --subject $subject ` --token "repoV2/$projectid" ` --allow-bit 0 ` --merge false
方法二:使用REST API移除权限
步骤1:获取安全组Descriptor
发送GET请求获取组信息:
GET https://vssps.dev.azure.com/{organization}/_apis/graph/groups?api-version=7.1-preview.1&scopeDescriptor={projectDescriptor}
(注:projectDescriptor可通过项目详情接口获取,或直接在Azure CLI结果中提取)
步骤2:重置权限(推荐)
发送POST请求重置该组在项目所有仓库的权限:
POST https://dev.azure.com/{organization}/{project}/_apis/securitypermissions/reset?api-version=7.1-preview.1 Content-Type: application/json { "securityNamespaceId": "2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87", "token": "repoV2/{projectId}", "descriptors": ["{subjectDescriptor}"] }
步骤3:(可选)直接更新权限清除所有允许项
发送PATCH请求覆盖权限设置:
PATCH https://dev.azure.com/{organization}/{project}/_apis/securitypermissions/2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87?token=repoV2/{projectId}&api-version=7.1-preview.1 Content-Type: application/json { "descriptor": "{subjectDescriptor}", "allow": 0, "deny": 0, "merge": false }
注意事项
- 操作前确保拥有项目管理员或组织管理员权限,否则无法修改权限
repoV2/{projectId}代表项目下所有Git仓库,若需针对单个仓库,token格式为repoV2/{projectId}/{repoId}- 重置权限后,组会继承上级(如项目级)的权限配置,若需完全移除该组对仓库的访问,需同步检查上级权限设置
内容的提问来源于stack exchange,提问作者Joe_12345
相关产品推荐
相关产品推荐


