如何使用 Azure DevOps Server Rest APi 授予权限

How do I give Permissions using Azure DevOps Server Rest APi

https://docs.microsoft.com/en-us/rest/api/azure/devops/security/?view=azure-devops-server-rest-5.0 https://docs.microsoft.com/en-us/rest/api/azure/devops/security/access%20control%20entries?view=azure-devops-server-rest-5.0

你好,我在尝试理解在 ADO 2019 中使用 API 设置权限的方式时遇到问题。我可以看到安全命名空间 one API 的作用。我可以按位获取与 git 回购相关的信息。我看不到如何向用户或组添加权限。例如我看不到如何获得具有多个权限的按位,我只是将它们加在一起吗?我可以看到 API 说明如何添加 ACE,但实际上并没有告诉我如何真正添加权限。我会尽力解释。

如果我对 ACL 运行 API,我会得到一堆信息,其中一个是令牌。 好的,如果我使用 git API 获取 git 存储库的 GUID 来列出它们,GUID 将与令牌中的 ID 匹配,就像命名空间一样。没有。

这些例子似乎不是真实的例子。我正在寻找“如果你有一个 git 存储库,这里是你将如何授予某人对它的权限”“这是一个获取组的现有权限并添加另一个的示例”。

相反,它只是 '这里有一串 guid 被放入 API' 中,但没有解释这些部分或它具体在做什么。我似乎无法将 GUI 中用于添加权限的内容与安全性 API 带来的内容联系起来。

我是 Azure DevOps on prem,所以我在工具选择上更受限制。我问过的其他人说他们放弃了尝试使用它。 Twitter 上的 AzureDevops 说我可以在这里与团队联系。我在问如何处理安全 API,然后我可以写下来并建议如何更新文档。我显然太厚了,无法从那里弄清楚,而且我似乎不是唯一的人。谢谢

对于 Azure DevOps 服务,您可以使用 Graph API 管理组成员身份。但是这个 api 不适用于 Azure DevOps Server。

在我看来,对于本地 TFS/Azure DevOps Server,TFSSecurity 命令行比 TFS API 更容易为服务器级别的用户或组添加权限,集合-级或项目级组。您可以考虑使用 TFSSecurity 命令行:

https://docs.microsoft.com/en-us/azure/devops/server/command-line/tfssecurity-cmd?view=azure-devops-2019

您也可以查看以下代码获取权限:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.TeamFoundation.Client;
    using Microsoft.TeamFoundation.Server;
    using Microsoft.TeamFoundation.VersionControl.Client;
    using Microsoft.TeamFoundation.Framework.Client;

    namespace API
    {
        class Program
        {
            static void Main(string[] args)
            {
                string project = "http://xxx.xxx.xxx.xxx:8080/tfs";
                TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(project));
                var tps = tpc.GetService<VersionControlServer>();
                var ttt = tps.GetTeamProject("ProjectName");
                ISecurityService securityService = tpc.GetService<ISecurityService>();
                System.Collections.ObjectModel.ReadOnlyCollection<SecurityNamespace> securityNamespaces = securityService.GetSecurityNamespaces();
                IGroupSecurityService gss = tpc.GetService<IGroupSecurityService>();
                Identity SIDS = gss.ReadIdentity(SearchFactor.AccountName, "GroupName", QueryMembership.Expanded);//GourName format: [ProjectName]\GourpName
                IdentityDescriptor id = new IdentityDescriptor("Microsoft.TeamFoundation.Identity", SIDS.Sid);
                List<SecurityNamespace> securityList = securityNamespaces.ToList<SecurityNamespace>();
                string securityToken;
                foreach (SecurityNamespace sn in securityList)
                {
                    if (sn.Description.DisplayName == "Project")
                    {
                        securityToken = "$PROJECT:" + ttt.ArtifactUri.AbsoluteUri;
                        sn.SetPermissions(securityToken, id, 115, 0, true);
                    }
                }                
            }
        }
    }