授予 Azure DevOps 内置用户权限

Give rights to Azure DevOps build-in Users

我整天都在谷歌搜索,但找不到解决方案。在 Azure DevOps 中,为每个项目创建了内置用户。其中一个用户是默认构建代理用户(通常命名为 <projectName> Build Service)。

我已经使用 Azure DevOps REST API 自动创建存储库和管道。下一步是向内置构建代理用户授予某些权限。我已经在努力寻找 API.

中的内置用户

那么如何使用 REST API 向该用户授予权限?

目标是将默认的内置构建代理用户添加到贡献者角色,以便他可以将标签推送到存储库。

你可以通过 Users - List API:

得到他
GET https://vssps.dev.azure.com/{organization}/_apis/graph/users?api-version=6.0-preview.1

在回复中我可以看到:

Give rights to Azure DevOps build-in Users

您可以使用 REST API Users - List API: 获取您的组的标识符。

        "subjectKind": "user",
        "domain": "Build",
        "principalName": "f0a50df8-5a11-41c3-8d7e-22180f923c80",
        "mailAddress": "",
        "origin": "vsts",
        "originId": "64b9d209-XXXXX-bb46ade01dc",
        "displayName": "MyTestProject Build Service (YourOrganizationName)",

originId是下面REST中的Id API URL.

然后我们使用Identitiesapi.

GET https://vssps.dev.azure.com/fabrikam/_apis/Identities/{id}?queryMembership=None

然后从json响应中获取描述符.Descriptor.Identifier:

{
    "Id": "64b9d209-0deb-4d9c-9e8d-6bb46ade01dc",
    "Descriptor": {
        "IdentityType": "Microsoft.TeamFoundation.ServiceIdentity",
        "Identifier": "0a2bf5f-XXXXd-1e9006e97c76:Build:f0a50df8-5a11-41c3-8d7e-22180f923c80"
    },

如果您没有组 ID,但有显示名称:

GET https://vssps.dev.azure.com/fabrikam/_apis/Identities?searchFactor=DisplayName&factorValue={display name url encoded}&options=None&queryMembership=None

然后从 json 响应中获取描述符 [0].Descriptor.Identifier

现在,我们有了 Identity,我们可以使用 REST API Access Control Entries - Set Access Control Entries 来设置该组的权限:

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

请求正文:

{ 
   "token":"repoV2/{projectId}/{repoId}/",
   "merge":true,
   "accessControlEntries":[ 
      { 
         "descriptor":"Microsoft.TeamFoundation.Identity;{groupIdentifier}",
         "allow":2,
         "deny":0,
         "extendedInfo":{ 
            "effectiveAllow":2,
            "effectiveDeny":0,
            "inheritedAllow":2,
            "inheritedDeny":0
         }
      }
   ]
}

请注意 url 中的 id 是硬编码的,因为它是一个常量。但是你也可以从

的响应中获取
GET https://dev.azure.com/{organization}/_apis/securitynamespaces