我正在尝试在分支级别上限制特定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?
答案 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,如下所示,它是6d0061007300740065007200
。
然后使用此工具将master
转换为十六进制。
希望这会有所帮助。