如何使用 Rest 管理 Azure DevOps 组权限 API

How to manage Azure DevOps group permissions using Rest API

我正在处理一项自动化任务,我需要一个组对 Repos、Pipelines 和 Releases 等拥有一组权限。我正在寻找可以管理该组的权限。

例如:

在 Cross repo 策略中,我如何 manage/set 组“PROJECT ADMINISTRATORS”的权限以允许“推送时绕过策略”、“推送时绕过策略”等使用 Rest API.

提前致谢。

根据您的要求,您可以使用 Rest API:Access Control Entries - Set Access Control Entries

POST https://dev.azure.com/{organization}/_apis/accesscontrolentries/{securityNamespaceId}?api-version=6.0

请求正文:

{
  "token": "repoV2/{ProjectID}/{RepoID(If you want to set the permission for a single repo)}",
  "merge": true,
  "accessControlEntries": [
    {
      "descriptor": "Microsoft.TeamFoundation.Identity;S-....",
      "allow": 32768,
      "deny": 0,
      "extendedinfo": {}
    }
  ]
}

您可以通过以下方法获取RestAPI中需要的参数值:

securityNamespaceId:

GET https://dev.azure.com/{OrganizationName}/_apis/securitynamespaces?api-version=6.0

在响应正文中:您可以搜索 Git 存储库

然后就可以得到权限对应的namespaceid和参数值

例如:

获取Group Identity(S-...),没有直接RestAPI获取。您使用以下方法获取它:

1.Get描述符:

 GET https://vssps.dev.azure.com/{org name}/_apis/graph/users?api-version=5.1-preview.1

2.Using 下面的 C# 代码来转换它:

public static string Base64Decode(string base64EncodedData)
        {
            var lengthMod4 = base64EncodedData.Length % 4;
            if (lengthMod4 != 0)
            {
                //fix Invalid length for a Base-64 char array or string
                base64EncodedData += new string('=', 4 - lengthMod4);
            }
            var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
            return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
        }

public static string Base64Encode(string plainText)
        {
            var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
            return System.Convert.ToBase64String(plainTextBytes);
        }

这里有a blog我们的Azure Identity Team工程师写的,你可以参考它了解更多详细信息。

另外,您也可以通过浏览器F12记录直接获取所有参数的值