获取Accesscontrol的分支ID

时间:2019-10-23 19:11:04

标签: git azure-devops azure-devops-rest-api azure-repos

我正在尝试在分支级别上限制特定AD组的权限。以前,我曾问过Microsoft Azure DevOps团队,他们是否对此请求有任何终结点URI REST API,但是我得到的答复是它当前不可用。但是,我设法使用chrome开发人员工具来获取API,

https://dev.azure.com/{organization}/_apis/accesscontrolentries/{namespacetoken}?api-version=5.1

然后,我使用下面的这个主体发出POST请求,

branchPermissionbody = {
                "token": "{}".format(permissionToken),
                "merge": True,
                "accessControlEntries": [
                    {
                        "descriptor": "Microsoft.TeamFoundation.Identity;{}".format(descriptorIdentifier),
                        "deny": 4,
                        "extendedinfo": {}
                    }
                ]
            }

许可令牌的格式为

 repoV2/{projectID}/{repositoryID}/refs/heads/{branchID}/

我们可以得到描述符标识符。

在这里,我一直在获取branchID。例如,如果我们要限制的分支是mastersupport%5E,我们如何使用开发人员工具来获取这些分支ID?

2 个答案:

答案 0 :(得分:2)

This blog post explains it all

我的一位读者刚发现您遇到的问题,并以评论的形式发布了解决方案:

  

Pickle Rick Guest • 2 days ago

     

对不起,这是我以前做错了的两件事,但是我目前的理解是:

     

使用az更新特定分支的权限需要每个   分支名称的一部分以unicode进行十六进制编码。我的意思是说   如果您使用功能/分支名称作为约定,则其十六进制/十六进制而不是   而不是正斜杠。都疯了。

     

使用powershell我已经结束了:

 function hexify($string) { return ($string | Format-Hex -Encoding
      Unicode | Select-Object -Expand Bytes | ForEach-Object { '{0:x2}' -f
      $_ }) -join '' }

 $branch = "feature/*" $split = $branch.Split("/") $hexBranch = ($split
      | ForEach-Object { hexify -string $_ }) -join "/"
     

然后您可以使用该字符串生成令牌,例如:

 repoV2/daec401a-49b6-4758-adb5-3f65fd3264e3/f59f38e0-e8c4-45d5-8dee-0d20e7ada1b7/refs/heads/6600650061007400750072006500/2a00
     

真是一团糟!我不知道为什么refs / heads和   其他未编码。也许我想念一些东西,但是嘿   似乎有效。

     

感谢您的示例为我指明了正确的方向。

令牌有点噩梦。例如,没有一致的API来获取分支的令牌。我还看到了以下格式:

  

由于/是令牌分隔符,因此通过将/替换为^来转义分支引用。因此refs/heads/master变为:refs^heads^master


不确定代码为何对您不起作用,这可能与控制台的代码页或输入数据的unicode之王有关。

这是我运行代码示例时得到的:

function hexify($string) {
     return ($string | Format-Hex -Encoding Unicode | Select-Object -Expand Bytes | ForEach-Object { '{0:x2}' -f $_ }) -join ''
}

$branch = "feature/mine"
$split = $branch.Split("/")
$hexBranch = ($split | ForEach-Object { hexify -string $_ }) -join "/"

write-host "refs/heads/$hexBranch"
refs/heads/6600650061007400750072006500/6d0069006e006500

答案 1 :(得分:2)

您可以使用此工具将分支名称自动转换为分支ID。 https://onlineunicodetools.com/convert-unicode-to-hex

要进行测试,我可以从开发人员工具中获取主分支ID,如下所示,它是6d0061007300740065007200enter image description here

然后使用此工具将master转换为十六进制。

enter image description here

这些值是相同的。那support%5Eenter image description here enter image description here

希望这会有所帮助。