Получение идентификатора филиала для Accesscontrol - PullRequest
2 голосов
/ 23 октября 2019

Я пытаюсь ограничить разрешения для конкретной группы AD на уровне филиала. Ранее я спрашивал группу разработчиков Microsoft Azure, есть ли у них какой-либо REST API URI конечной точки для этого запроса, но я получил ответ, что он в данный момент недоступен. Однако мне удалось получить API, используя инструмент разработчика Chrome, который был

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 ветки с помощью инструмента разработчика?

Ответы [ 2 ]

2 голосов
/ 24 октября 2019

Вы можете использовать этот инструмент для автоматического преобразования имени вашей ветви в ее идентификатор. https://onlineunicodetools.com/convert-unicode-to-hex

Для теста я получаю свой основной идентификатор ветки из инструмента разработчика, он равен 6d0061007300740065007200, как показано ниже. enter image description here

И затем используйте этот инструмент для преобразования master в гекс.

enter image description here

Этизначения одинаковы. Тогда как насчет support%5E enter image description here enter image description here

Надеюсь, это поможет.

2 голосов
/ 23 октября 2019

Этот пост в блоге объясняет все это .

Один из моих читателей только что понял вашу проблему и отправил решение в виде комментария:

Pickle Rick Гость • 2 дня назад

Извините, это дубль 2 из того же, что я и раньше неправильно поняла,но мое текущее понимание таково:

Использование az для обновления разрешений для конкретной ветви требует, чтобы каждая часть имени ветви была закодирована в шестнадцатеричном формате в Unicode. По сути, я имею в виду, если вы используете в качестве соглашения feature / branchname, его шестнадцатеричный / шестнадцатеричный код, а не кодируемые косые черты. Это все немного сумасшествие.

Используя 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

Какой полный беспорядок! Я понятия не имею, почему обе ссылки / главы / и другие / не закодированы. может быть, я что-то упускаю, но эй, похоже, это сработает.

Спасибо за ваши примеры, указывающие мне правильное направление.

Знак является чем-то вроде кошмара. Например, нет единого 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
...