Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tfs 如何以编程方式向Azure Devops中的特定组授予存储库读取权限_Tfs_Azure Devops_Acl_Azure Devops Rest Api_Tfs Security - Fatal编程技术网

Tfs 如何以编程方式向Azure Devops中的特定组授予存储库读取权限

Tfs 如何以编程方式向Azure Devops中的特定组授予存储库读取权限,tfs,azure-devops,acl,azure-devops-rest-api,tfs-security,Tfs,Azure Devops,Acl,Azure Devops Rest Api,Tfs Security,我拥有Azure Devops组织,希望为给定存储库列表中的某个组设置只读权限 下面指定了如何通过web控制台手动执行此操作: 如何通过RESTAPI或其他编程方式实现 我发现以下内容可以设置全局权限:而且似乎还有一个API可以设置ACL,但其中没有任何内容指定如何使用Azure Devops Rest API标识受信者组或目标存储库:: 首先,您需要获取组的标识符。这可以通过identiesapi来完成 如果您拥有组的唯一id: GET https://vssps.dev.azure.com/

我拥有Azure Devops组织,希望为给定存储库列表中的某个组设置只读权限

下面指定了如何通过web控制台手动执行此操作:

如何通过RESTAPI或其他编程方式实现


我发现以下内容可以设置全局权限:而且似乎还有一个API可以设置ACL,但其中没有任何内容指定如何使用Azure Devops Rest API标识受信者组或目标存储库:

首先,您需要获取组的标识符。这可以通过
identies
api来完成

如果您拥有组的唯一id:

GET https://vssps.dev.azure.com/fabrikam/_apis/Identities/{id}?queryMembership=None
然后从json响应
.descriptor.Identifier
中获取描述符

如果您没有组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

获取您的存储库id和项目id(这比组标识符容易得多,所以我不会详细说明),然后您就拥有了所有必需的数据。构建您的请求主体:

{ 
   "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/fabrikam/_apis/securitynamespaces

显然,Azure Devops从web控制台正确地使用了自己的rest api,所以我可以对其进行反向工程。将更新
GET https://dev.azure.com/fabrikam/_apis/securitynamespaces