Я изо всех сил пытаюсь изучить документацию по API для Azure, посвященную тому, как добавить пользователя в определенное репо с помощью Rest API с доступом для чтения и записи к репозиторию git. Пожалуйста, помогите мне в этом.
Например: есть 3 репозитория. Я хочу ограничить доступ к двум другим репозиториям через API. Я получил namespaceId и использовал API-интерфейсы управления доступом, ничего не помогло.
Привет, я новичок в DevOps. У меня есть список адресов электронной почты пользователей. Я создал проект, репозитории и ветки, используя вызовы API. Теперь я просто хочу добавить пользователей в определенный репозиторий с разрешением на чтение и запись. У меня есть namespaceId для их контроля доступа.
Никаких действий по добавлению пользователей в тот или иной репозиторий нет. Доступ пользователей к репозиторию можно организовать по уровням доступа и группам безопасности. Все ли они находятся на базовом уровне доступа или выше? Они уже добавлены в организацию DevOps?
Привет, Элвин! Да, они добавлены в организацию с доступом к команде проекта/участнику по умолчанию, но у них не должно быть доступа ко всем репозиториям, кроме одного.
По умолчанию члены группы [Project]\Contributors имеют доступ ко всем репозиториям в этом проекте. Чего вы на самом деле ожидаете от этого поста? Запретить пользователям доступ ко всем репозиториям, кроме одного конкретного репо? Пожалуйста, внесите ясность в исходное сообщение.
Да, Элвин, я хочу, чтобы пользователь имел доступ только к определенному репозиторию, но не к другим репозиториям.
@Привет, Джай! Есть ли у вас возможность протестировать мой приведенный ниже сценарий для вызова API и ограничения доступа к репозиторию для группы пользователей? Надеюсь, это поможет решить ваш вопрос в этом посте. Спасибо.
Судя по дальнейшим обсуждениям, фактическое требование состоит в том, чтобы разрешить пользователям доступ к одному репозиторию в проекте и запретить доступ к другим репозиториям в этом проекте. Для этого вы можете попробовать приведенный ниже пример сценария PowerShell, который запретит всем репозиториям разрешение на участие для группы [PrjectA]\Contributors
и разрешит разрешение Repo1 Contribute для группы [PrjectA]\Contributors
.
$organization = "YourADOOrgName"
$project = "ProjectA"
$groupName = "Contributors"
$allowRepo = "Repo1"
$MyPat = 'xxxxx'
$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$MyPat"))
$headers = @{
'Authorization' = 'Basic ' + $B64Pat
'Content-Type' = 'application/json'
}
# Get projects GET https://dev.azure.com/{organization}/_apis/projects?api-version=7.1-preview.4
$projectsURL = "https://dev.azure.com/$organization/_apis/projects?api-version=7.1-preview.4"
$projects = Invoke-RestMethod -Uri $projectsURL -Method Get -Headers $headers
$projectA = $projects.value | Where-Object { $_.name -eq "$project" }
$projectAId = $projectA.id
Write-Host "The id of $project is $projectAId"
# Get repos GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories?api-version=7.1-preview.1
$reposURL = "https://dev.azure.com/$organization/$project/_apis/git/repositories?api-version=7.1-preview.1"
$repos = Invoke-RestMethod -Uri $reposURL -Method Get -Headers $headers
$repo = $repos.value | Where-Object { $_.name -eq "$allowRepo" }
$repoId = $repo.id
Write-Host "The id of $allowRepo is $repoId"
# Get group identity GET https://vssps.dev.azure.com/{organization}/_apis/identities?searchFilter=General&filterValue=Project Collection Valid Users&queryMembership=None&api-version=7.2-preview.1
$groupIdsURL = "https://vssps.dev.azure.com/$organization/_apis/identities?searchFilter=General&filterValue=[$project]\$groupName&queryMembership=None&api-version=7.2-preview.1"
$groupIds = Invoke-RestMethod -Uri $groupIdsURL -Method Get -Headers $headers
$groupId = $groupIds.value | Where-Object { $_.providerDisplayName -eq "[$project]\$groupName" }
$groupDescriptor = $groupId.descriptor
Write-Host "The descriptor for group [$project]\$groupName is $groupDescriptor"
# All security namespaces GET https://dev.azure.com/{organization}/_apis/securitynamespaces?api-version=7.2-preview.1
$namespacesURL = "https://dev.azure.com/$organization/_apis/securitynamespaces?api-version=7.2-preview.1"
$namespaces = Invoke-RestMethod -Uri $namespacesURL -Method Get -Headers $headers
$namespaces | ConvertTo-Json -Depth 100 | Out-File "C:\Users\Alvin\Desktop\namespaces.json"
$namespaceGitRepos = $namespaces.value | Where-Object { $_.displayName -eq "Git Repositories" }
$namespaceIdGitReposContribute = $namespaceGitRepos.actions | Where-Object { $_.displayName -eq "Contribute" }
$namespaceIdGitReposContributeBit = $namespaceIdGitReposContribute.bit
$namespaceIdGitRepos = $namespaceGitRepos.namespaceId
Write-Host "The id for namespace Git Repositories is $namespaceIdGitRepos"
Write-Host "The bit for permission Contribute in namespace Git Repositories is $namespaceIdGitReposContributeBit"
# Access Control Entries - Set Access Control Entries POST https://dev.azure.com/{organization}/_apis/accesscontrolentries/{securityNamespaceId}?api-version=7.2-preview.1
$contributeACEURL = "https://dev.azure.com/$organization/_apis/accesscontrolentries/${namespaceIdGitRepos}?api-version=7.2-preview.1"
# Deny All repositories Contribute permission for [PrjectA]\Contributors group
$contributeDenyACEBody = @{
"token" = "repoV2/$projectAId"
"merge" = $true
"accessControlEntries" = @(
@{
"descriptor" = "$groupDescriptor"
"allow" = 0
"deny" = $namespaceIdGitReposContributeBit
"extendedInfo"= @{
"effectiveAllow" = 0
"effectiveDeny" = $namespaceIdGitReposContributeBit
"inheritedAllow" = 0
"inheritedDeny" = $namespaceIdGitReposContributeBit
}
}
)
} | ConvertTo-Json -Depth 100
Invoke-RestMethod -Uri $contributeACEURL -Method Post -Headers $headers -Body $contributeDenyACEBody
# Allow Repo1 Contribute permission for [PrjectA]\Contributors group
$contributeAllowACEBody = @{
"token" = "repoV2/$projectAId/$repoId"
"merge" = $true
"accessControlEntries" = @(
@{
"descriptor" = "$groupDescriptor"
"allow" = $namespaceIdGitReposContributeBit
"deny" = 0
"extendedInfo"= @{
"effectiveAllow" = $namespaceIdGitReposContributeBit
"effectiveDeny" = 0
"inheritedAllow" = $namespaceIdGitReposContributeBit
"inheritedDeny" = 0
}
}
)
} | ConvertTo-Json -Depth 100
Invoke-RestMethod -Uri $contributeACEURL -Method Post -Headers $headers -Body $contributeAllowACEBody
После проверки работоспособности вы можете распространить другие разрешения, например «Чтение», и установить разрешения для другой группы пользователей, например «Читатели».
Это потрясающе, спасибо! Элвин
Привет, добро пожаловать в SO. Могу ли я узнать, что вы ожидаете добавить пользователя в группу безопасности проекта, например [ProjectA]\Contributors, или в специальную группу с доступом к репозиторию?