我需要限制 Azure 存储库中特定用户组的 50 个存储库中某些分支的权限。也就是说,一组特定的用户不能强制推送到主分支,但可以强制推送到其他分支。
这在界面中很容易做到,但需要转到 50+ 存储库并手动执行此任务。我一直在阅读 Azure 存储库 API 文档,但我正在努力了解如何设置它?
正如博客文章 https://jessehouwing.net/azure-devops-git-setting-default-repository-permissions/中所解释的:
tfssecurity /a+ "Git Repositories" repoV2/<Team Project GUID>/<repository guid>/refs^heads^<branch name>/ "ForcePush" <memberIdentity> DENY /collection:https://dev.azure.com/{organization}
可以通过 REST API 找到存储库 guid,其中 GitRepository.id 包含 guid: https://learn.microsoft.com/en-us/rest/api/azure/devops/git/repositories/list?view=azure-devops-rest-5.1#examples
有关如何指定成员标识的详细信息,请参阅 https://learn.microsoft.com/en-us/azure/devops/server/command-line/tfssecurity-cmd?view=azure-devops。
您可以使用下面的 rest api 为组设置分支权限。
POST https://dev.azure.com/{orgname}/{projectid}/_api/_security/ManagePermissions?__v=5
下面是请求正文的示例。
{"updatePackage":
"{"IsRemovingIdentity":false,
"TeamFoundationId":"{teamfoundationId}}",
"DescriptorIdentityType":"Microsoft.TeamFoundation.Identity",
"DescriptorIdentifier":"{DescriptorIdentifier}}",
"PermissionSetId":"2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87",
"PermissionSetToken":"repoV2/{projectId}}/{repoId}}/refs^heads^{branchname}}/",
"RefreshIdentities":false,
"Updates":
[{"PermissionId":1,"PermissionBit":32768,"NamespaceId":"2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87",
"Token":"repoV2/{projectId}/{repoId}/refs/heads/{branchId}/"}],
"TokenDisplayName":null}"}
注意
"PermissionId":1
表示将权限设置为"允许","PermissionId":2
表示将权限设置为"拒绝","PermissionId":1
表示将权限设置为"未设置"。
"PermissionBit":32768
是完成拉取请求时绕过策略权限。"PermissionBit":128
是推送权限时的绕过策略。
"PermissionBit":4
是推送权限时的参与策略。
"PermissionBit":2048
是"编辑策略"权限。
"PermissionBit":8
是Fource推送权限。
"PermissionBit":8192
是"管理"权限。
"PermissionBit":4096
是删除他人的锁定权限。
加法
请求正文中的参数太多,您可以通过官方文档获取参数。或者我重新命令您使用网络工具手动获取这些参数。