Azure DevOps Rest API 不会 return 属于特定组成员的组

AzureDevOps RestAPI does not return groups that are a member of a certain group

我观察到 Azure DevOps REST 的奇怪行为 API。 此文档页面 https://docs.microsoft.com/en-us/rest/api/azure/devops/memberentitlementmanagement/?view=azure-devops-rest-5.1 说“成员是添加到帐户的用户或组。”

但是当我尝试让某个组的成员像这样时: https://vsaex.dev.azure.com/XXXXX/_apis/GroupEntitlements/YYY/members?api-version=5.1-preview.1

它returns所有用户成员都很好,悬停没有YYY组的组成员。同时我可以看到YYY包含了相当多的组是YYY的成员。

同时我没有看到其他 API 看起来能够满足我的需求。 我的个人访问令牌拥有所有对象类型的所有 'Read' 权限。 我错过了一些明显的东西吗? 提前致谢。

作为解决方法,我们可以使用 API 列出所有组并获取组 ID(响应正文中的组 ID 为 originId

GET https://vssps.dev.azure.com/{Org name}/_apis/graph/groups?api-version=6.0-preview.1

通过下面的 REST API

获取一组 subjectDescriptor

注意:subjectDescriptor是响应正文中的字段value

GET https://vssps.dev.azure.com/{Org name}/_apis/graph/descriptors/{Group ID}

列出群组成员

POST https://dev.azure.com/{Org name}/_apis/Contribution/HierarchyQuery?api-version=5.1-preview.1

请求正文

{
  "contributionIds": [
    "ms.vss-admin-web.org-admin-members-data-provider"
  ],
  "dataProviderContext": {
    "properties": {
      "subjectDescriptor": "{subjectDescriptor}",
      "sourcePage": {
        "url": "https://dev.azure.com/{Org name}/_settings/groups?subjectDescriptor={subjectDescriptor}",
        "routeId": "ms.vss-admin-web.collection-admin-hub-route",
        "routeValues": {
          "adminPivot": "groups",
          "controller": "ContributedPage",
          "action": "Execute"
        }
      }
    }
  }
}

结果:

注意:我建议您将初始问题提交给 Developer Community,他们会检查并联系产品团队。

更新1

检查组权限并获取 NamespaceId 和 Token。

GET https://dev.azure.com/{Org name}/_apis/Contribution/HierarchyQuery?api-version=6.0-preview

请求正文

{
  "contributionIds": [
    "ms.vss-admin-web.org-admin-groups-permissions-pivot-data-provider"
  ],
  "dataProviderContext": {
    "properties": {
      "subjectDescriptor": "{subjectDescriptor},
      "sourcePage": {
        "url": "https://dev.azure.com/v-viliu/_settings/groups?subjectDescriptor={subjectDescriptor}",
        "routeId": "ms.vss-admin-web.collection-admin-hub-route",
        "routeValues": {
          "adminPivot": "groups",
          "controller": "ContributedPage",
          "action": "Execute"
        }
      }
    }
  }
}

通过下面获取描述符API

GET https://dev.azure.com/{Org name}/_apis/accesscontrollists/{securityNamespaceId}?api-version=6.0

Get group permission detail info

https://dev.azure.com/{Org name}/_apis/accesscontrollists/{securityNamespaceId}?token={Token}&descriptors={descriptor}&api-version=6.0

注意:这是二进制代码。

Update group permission.

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

我们可以通过上面的API获取到请求体,如果需要更改权限,只需要更改字段Allow和Deny的值即可。

你也可以参考这篇