You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何可视化Azure DevOps中的权限?求自动化实现方案

实现Azure DevOps权限体系树形可视化(含继承权限)

要直观展示Azure DevOps从组织到资源的完整权限链路(含继承关系),可以通过调用Azure DevOps REST API + 脚本处理生成树形结构,替代官方文档的纯文字说明。下面是具体实现方案:

核心逻辑

Azure DevOps的权限是层级继承的:组织→项目→团队/资源(仓库、流水线、看板等)。要完整梳理权限,需要遍历每个层级的权限设置,同时区分直接分配权限和继承自父级的权限,最后把这些数据组织成树形结构。

步骤1:准备环境与权限

  • 生成个人访问令牌(PAT):需勾选「Security」「Project and Team」「Code」「Build」等权限(按需求调整范围,遵循最小权限原则)。
  • 安装PowerShell(或Python等语言,以下以PowerShell为例)。

步骤2:脚本实现(PowerShell)

以下脚本会遍历组织、项目、仓库的权限,整理成树形结构输出:

# 配置参数
$orgUrl = "https://dev.azure.com/your-organization-name"
$pat = "your-pat-token"
$encodedPat = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$pat"))

# 获取组织级角色权限
Write-Host "=== 组织级权限 ==="
$orgRoles = Invoke-RestMethod -Uri "$orgUrl/_apis/securityroles/scopes/7ab0ccd2-d30a-496b-b97d-6f84d5d24b9e/roles?api-version=7.1-preview.1" -Headers @{Authorization = "Basic $encodedPat"}
foreach ($role in $orgRoles.value) {
    Write-Host "`n* 角色: $($role.name)"
    Write-Host "  权限:"
    foreach ($perm in $role.permissions) {
        Write-Host "    - $($perm.displayName) : $($perm.permission)"
    }
}

# 获取所有项目
$projects = Invoke-RestMethod -Uri "$orgUrl/_apis/projects?api-version=7.1-preview.4" -Headers @{Authorization = "Basic $encodedPat"}

foreach ($project in $projects.value) {
    Write-Host "`n=== 项目: $($project.name) ==="
    # 获取项目级角色权限
    $projectRoles = Invoke-RestMethod -Uri "$orgUrl/$($project.id)/_apis/securityroles/scopes/2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87/roles?api-version=7.1-preview.1" -Headers @{Authorization = "Basic $encodedPat"}
    foreach ($role in $projectRoles.value) {
        Write-Host "`n  * 项目角色: $($role.name)"
        Write-Host "    权限:"
        foreach ($perm in $role.permissions) {
            Write-Host "      - $($perm.displayName) : $($perm.permission)"
        }
    }

    # 获取项目下的仓库权限
    $repos = Invoke-RestMethod -Uri "$orgUrl/$($project.id)/_apis/git/repositories?api-version=7.1-preview.1" -Headers @{Authorization = "Basic $encodedPat"}
    foreach ($repo in $repos.value) {
        Write-Host "`n    === 仓库: $($repo.name) ==="
        $repoPerms = Invoke-RestMethod -Uri "$orgUrl/$($project.id)/_apis/securitynamespaces/2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87/tokens/$([Uri]::EscapeDataString("repoV2/$($repo.id)"))/permissions?api-version=7.1-preview.1" -Headers @{Authorization = "Basic $encodedPat"}
        foreach ($ace in $repoPerms.value) {
            Write-Host "`n      * 主体: $($ace.identity.displayName)"
            Write-Host "        直接权限:"
            foreach ($perm in $ace.permissions) {
                Write-Host "          - $($perm.displayName) : $($perm.value)"
            }
            Write-Host "        继承权限: 来自项目级角色"
        }
    }
}

步骤3:树形结构优化

如果需要更美观的树形展示,可以:

  • 把脚本输出的JSON数据导入到VS Code的Tree View插件、在线树形可视化工具生成图形化结构。
  • 在脚本中增加缩进逻辑,用Write-Host的空格控制层级,模拟树形。

权限分配建议

结合可视化的权限树,按角色梳理最小权限:

  • 开发:仓库读写、流水线执行、看板编辑(避免权限管理、项目设置权限)
  • 测试:测试计划读写、流水线执行、结果查看(避免代码提交权限)
  • 主管/经理:项目查看、报表访问、团队成员管理(避免直接修改代码/流水线)
  • 管理员:分项目管理员和组织管理员,项目管理员仅负责单个项目的权限/设置,组织管理员负责跨项目的全局配置(遵循最小权限原则,避免全权限滥用)

内容的提问来源于stack exchange,提问作者Gopal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 22:35:17