允许用户在不改变团队成员身份的情况下进行团队级别的配置

Permission for user to do team level configuration without being able to alter team membership

我们在 Azure DevOps 服务中有一个组织连接到 Azure AD。在 AAD 中,有代表企业中每个团队的组。目标是将这些现有的 AAD 组连接到 Azure DevOps 中的团队(即将这些组添加为团队成员),从而专门管理 AAD 中的成员资格。

这意味着任何人都不能更改团队成员(应该为项目管理员及以上人员保留)。

然而,当有人成为团队管理员时,他们会自动获得更改团队成员资格的权利,而不是团队管理员的人无法编辑团队设置,例如添加迭代或自定义看板(看板中的齿轮) . 我怎样才能分离这些权限,即允许用户进行团队级别的配置而不被允许管理团队的成员资格?

即使无法在 GUI 中执行解决方案,其中 ACL's are set directly through the rest api would be of interest. I have made some digging in the Security Namespaces 并通过设置团队中用户的 Identity 命名空间的 ManageMembership 位找到使用户成为团队的管理员(在 GUI 中可见)。用户可以进行团队级别的自定义并(正如权限位的名称所暗示的那样)更新团队的成员资格。 我无法找到允许团队级别自定义的权限,同时还没有授予管理团队成员资格的权限。

到目前为止我尝试了什么

不是团队管理员会产生消息

You do not have sufficient permissions to configure cards for this team. You must either be a team administrator or a project administrator.

通过 GUI 或通过设置团队的 Manage Membership 位将用户添加为团队管理员会删除消息,但也会授予添加和删除成员的权限,这是我不想要的

# Input Parameters
$ado_org="TestOragnization"                                     ## Azure devops Organization
$ado_pat="****************************************************" ## Azure devops PAT Token
$projectName = "TestProject"                                    ## Azure devops Project Name
$teamName = "TestTeam"                                          ## Azure devops Team Name (must exist in Project)
$userName = "test@example.com"                                  ## Azure devops user (must exist in organization)

# Construct PAT authentication header
# https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "user",$ado_pat)))
$headers = @{"Authorization" = ("Basic {0}" -f $base64AuthInfo)
}

# Get Project (https://docs.microsoft.com/en-us/rest/api/azure/devops/core/projects/get?)
$project = Invoke-RestMethod -Headers $headers `
  -Uri ("https://dev.azure.com/{0}/_apis/projects/{1}?api-version=6.0" -f $ado_org, $projectName) `

# Get Team (https://docs.microsoft.com/en-us/rest/api/azure/devops/core/teams/create)
$team = Invoke-RestMethod -Headers $headers `
  -Uri ("https://dev.azure.com/{0}/_apis/projects/{1}/teams/{2}?api-version=6.0" `
    -f $ado_org, $projectName, $teamName) `

# Get User (https://docs.microsoft.com/en-us/rest/api/azure/devops/ims/identities/read%20identities)
$user = Invoke-RestMethod -Headers $headers -Method GET -ContentType "application/json" `
  -Uri ("https://vssps.dev.azure.com/{0}/_apis/identities?searchFilter=General&filterValue={1}&api-version=6.0" `
    -f $ado_org, $userName)

# Construct ACL request
$token = "{0}\{1}" -f $project.id, $team.id
$namespace = "5a27515b-ccd7-42c9-84f1-54c998f03866" # Identity namespace
$allowbits = 8 # Manage Membership bit

$body = @{
  "token" = $token;
  "merge" = $false;
  "accessControlEntries" = @(
    @{
      "descriptor" = $user.value.descriptor
      "allow" = $allowbits;
      "deny" = 0;
      "extendedinfo" = @{};
    };
  )
}

# Set ACL
# https://docs.microsoft.com/en-us/rest/api/azure/devops/security/access%20control%20entries
Invoke-RestMethod -Headers $headers -Method POST -ContentType "application/json" `
  -Uri ("https://dev.azure.com/{0}/_apis/accesscontrolentries/{1}?api-version=6.0" -f $ado_org, $namespace) `
  -Body $(ConvertTo-Json -InputObject $body -depth 10)

正如the document提到的,

To configure team settings, you must be added to the team administrator role or be a member of the Project Administrators security group.

我们没有其他方法可以单独授予用户配置团队设置的权限。

同样,要将用户添加到团队,您必须是团队管理员项目管理员。我们也没有其他方法可以单独授予用户此权限。有关更多详细信息,请参阅“Add users to a project or team”。

因此,一旦用户被添加为 团队管理员 项目管理员 的成员,他就可以将用户添加到团队中,并且配置团队设置。我们无法将这些权限与管理员用户分开。