#powershell #azure-devops #azure-devops-rest-api
#powershell #azure-devops #azure-devops-rest-api
Вопрос:
Есть ли способ узнать, какая группа / пользователи имеют доступ и каковы разрешения для конкретного конвейера в проекте с REST API?
Ответ №1:
Я боюсь, что нет rest api, который может напрямую проверять разрешения группы / пользователей на определенный конвейер. Для получения желаемого необходимо использовать несколько rest API. Смотрите следующие шаги;
1, Получите группы через Groups list API. Получить всех пользователей через API списка пользователей.
Вам нужно получить subject descriptor
группу / пользователя из результата.
например. "descriptor: "acs.Nzc4OWYwOWQtZTA1My00ZjJlLWJkZWUtMGM4Zjg0NzZhNGJj"
2. Используйте дескриптор subject из приведенного выше rest api, чтобы получить api rest идентификаторов identity descriptor
via Identities — Read Identities
https://vssps.dev.azure.com/{organization}/_apis/identities?subjectDescriptors={subjectDescriptors}amp;api-version=6.1-preview.1
Получить identity descriptor
из результата:
например. "descriptor": "Microsoft.IdentityModel.Claims.ClaimsIdentity;7a394543-62fd-4274-a7d2-8fac775942b6\jtseng@vscsi.us"
3. Используйте списки управления доступом — Запрос Rest api для проверки разрешений для этой группы / пользователя с помощью вышеуказанного identity descriptor
и токена
GET https://dev.azure.com/{organization}/_apis/accesscontrollists/{securityNamespaceId}?token={token}amp;descriptors={descriptors}amp;includeExtendedInfo={includeExtendedInfo}amp;recurse={recurse}amp;api-version=6.1-preview.1
securityNamespaceId сборки является постоянным значением 33344d9c-fc72-4d6f-aba5-fa317101a7e9
. Все идентификаторы пространства securitynames смотрите здесь.
Формат токена projectId/buildDefinitionId
Например, URL-адрес запроса для получения разрешений для buildопределения может быть следующим:
"https://dev.azure.com/myOrg/_apis/accesscontrollists/33344d9c-fc72-4d6f-aba5-fa317101a7e9?includeExtendedInfo=Trueamp;token=****-****-4fa8-b2f1-0ee8f4fc82c5/87amp;descriptors=Microsoft.TeamFoundation.ServiceIdentity;bfbbe64a-653b-47f8-8f74-a56680a9bc6a:Build:39e13f04-cb4e-4fa8-b2f1-0ee8f4fc82c5amp;api-version=6.1-preview.1"
Затем вы получите результат разрешения, приведенный extendedInfo
ниже:
Чтобы понять значение разрешения (например. 3
ниже) в extendedInfo
extendedInfo": {"effectiveAllow": 3}
Вы можете проверить пространства имен безопасности — Запрос rest api. См. Ниже имя разрешения и его бит для построения пространств имен безопасности.
bit name displayName namespaceId
--- ---- ----------- -----------
1 ViewBuilds View builds 00000000-0000-0000-0000-000000000000
2 EditBuildQuality Edit build quality 00000000-0000-0000-0000-000000000000
4 RetainIndefinitely Retain indefinitely 00000000-0000-0000-0000-000000000000
8 DeleteBuilds Delete builds 00000000-0000-0000-0000-000000000000
16 ManageBuildQualities Manage build qualities 00000000-0000-0000-0000-000000000000
32 DestroyBuilds Destroy builds 00000000-0000-0000-0000-000000000000
64 UpdateBuildInformation Update build information 00000000-0000-0000-0000-000000000000
128 QueueBuilds Queue builds 00000000-0000-0000-0000-000000000000
256 ManageBuildQueue Manage build queue 00000000-0000-0000-0000-000000000000
512 StopBuilds Stop builds 00000000-0000-0000-0000-000000000000
1024 ViewBuildDefinition View build pipeline 00000000-0000-0000-0000-000000000000
2048 EditBuildDefinition Edit build pipeline 00000000-0000-0000-0000-000000000000
4096 DeleteBuildDefinition Delete build pipeline 00000000-0000-0000-0000-000000000000
8192 OverrideBuildCheckInValidation Override check-in validation by build 00000000-0000-0000-0000-000000000000
16384 AdministerBuildPermissions Administer build permissions 00000000-0000-0000-0000-000000000000
Значение effectiveAllow
является суммой битов для разрешенных разрешений. В приведенном выше примере. эффективным решением является 3
. Итак, разрешения для этой группы ViewBuilds -->allow
и EditBuildQuality-->allow
Надеюсь, это поможет!
Комментарии:
1. Спасибо за совет. Я собираюсь попробовать этот способ 🙂
2. Привет @Baequiraheal У вас была возможность попробовать вышеуказанное решение? Как все прошло?
3. Я понял, что это можно сделать с помощью нескольких иерархических запросов. Я могу опубликовать решение позже завтра, если оно может быть кому-то полезно 🙂 Было бы сложно суммировать биты и выяснить, каковы точные предпосылки.
4. Привет, @Baequiraheal. Было бы здорово, если бы вы могли поделиться своим решением. Спасибо!