2

我正在尝试在分支级别限制特定 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。例如,如果我们试图限制的分支是master, support%5E,我们如何使用开发者工具获取这些分支 ID?

4

2 回答 2

2

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

对于测试,我从 Developer tool 中获取了我的 master 分支 id,6d0061007300740065007200如下所示。 在此处输入图像描述

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

在此处输入图像描述

这些值是相同的。然后呢support%5E 在此处输入图像描述 在此处输入图像描述

希望这会有所帮助。

于 2019-10-24T05:56:11.343 回答
2

这篇博文解释了这一切

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

Pickle Rick 客人• 2 天前

抱歉,这与我之前弄错了两次相同,但我目前的理解是:

使用 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 可以获取分支的令牌。我还看到了以下格式:

因为 a/是标记分隔符,所以通过替换为 来转义分支/引用^。从而refs/heads/master变成:refs^heads^master


不确定为什么代码对您不起作用,它可能与您的控制台的代码页或输入数据的 unicode king 有关。

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

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
于 2019-10-23T19:32:37.987 回答