是否可以通过Azure DevOps API查看任何给定用户在DevOps项目中具有哪些权限?
我一直在查看“https://dev.azure.com/{organization} / _ apis / permissions / {securityNamespaceId} / {permissions}?api-version = 4.1”,但仅适用于请求的调用者。
有什么想法吗?
谢谢
如果您要在此页面中查看权限(项目设置=>权限=>用户)
然后您可以使用这两种解决方法来实现:
1。使用具有devops扩展名的Azure cli:
前提条件: Install the Azure Cli,具有azure-devops扩展名,然后运行az login
以使用您的凭据登录。这是quick start。
然后您可以使用az devops security permission show 列出特定用户的权限。
示例:
az devops security permission show --id 52d39943-cb85-4d7f-8fa8-c6baac873819 --subject [email protected] --token '$PROJECT:vstfs///Classification/TeamProject/{ProjectID}'
通常,此安全名称空间的ID始终为52d39943-cb85-4d7f-8fa8-c6baac873819
,ProjectID
是代表您的项目的ID。您可以使用Projects-list rest api轻松找到它。主题可以是特定用户的电子邮件ID的电子邮件地址。
这种方式的优势:
因为id
和token
在一个项目中始终是该值。我们只需要更改主题即可获得用户的权限。
az devops security permission show --id 52d39943-cb85-4d7f-8fa8-c6baac873819 --subject [email protected] --token '$PROJECT:vstfs///Classification/TeamProject/{ProjectID}'
az devops security permission show --id 52d39943-cb85-4d7f-8fa8-c6baac873819 --subject [email protected] --token '$PROJECT:vstfs///Classification/TeamProject/{ProjectID}'
...
运行以上命令时的响应如下所示:
2。使用未记录的Azure devops rest api:
https://dev.azure.com/{YourOrgName}/_apis/Contribution/HierarchyQuery?api-version=5.0-preview
我们应该使用Post
方法+application/json
Content-Type。 request body
看起来像这样:
{
"contributionIds": ["ms.vss-admin-web.org-admin-groups-permissions-pivot-data-provider"],
"dataProviderContext": {"properties": {
"subjectDescriptor": "msa.xxx",
"sourcePage": {
"url": "https://dev.azure.com/{OrgName}/{ProjectName}/_settings/permissions?subjectDescriptor=msa.xxx",
"routeId": "ms.vss-admin-web.project-admin-hub-route",
"routeValues": {
"project": "xxx",
"adminPivot": "permissions",
"controller": "ContributedPage",
"action": "Execute",
"serviceHost": "xxx (xxx)"
}
}
}}
}
此未记录的rest api可能更复杂。我建议您使用F12自己获取正确的请求正文。让我们以边缘浏览器为例:
1。在Web Portal中导航此页面并进入F12模式,然后单击清除会话按钮以清空列表。
2。查找其响应主体将返回与用户有关的所有权限的会话:
在我的测试中,该会话将收到1.10kb〜1.20kb,您可以轻松找到它。然后单击该会话,并转到其响应主体并启用漂亮打印。
您可以直接使用该body
来获取一个用户的权限。如果要获取其他用户,只需将当前用户的subjectDescriptor替换为其他用户的subjectDescriptor。关于什么是subjectDescriptor以及如何获取它们,可以参考我的another answer。