Azure DevOps高权限角色项目权限查询异常:EffectiveAllow值不准确求助
问题分析与解决方法
你的代码逻辑本身没问题,但Azure DevOps的权限是层级继承机制,az devops security permission list针对项目级命名空间查询时,只会返回该项目下直接配置的权限,不会自动拉取组织所有者、项目集合管理员这类更高层级角色的权限——这类角色的权限是在组织/集合层面授予的,默认覆盖所有项目的特权操作。
要生成完整的特权用户报告,需要分两步处理:
- 保留你现有逻辑,提取项目级直接授权的特权用户
- 额外查询并纳入以下高权限角色的成员:
- 组织所有者:默认拥有组织内所有资源的最高权限,包括删除任意项目
- 项目集合管理员:拥有对应项目集合内所有项目的管理权限,同样能执行删除项目这类操作
具体实现思路
- 先通过命令获取内置高权限组的标识:
# 获取组织所有者和项目集合管理员组的descriptor $highPrivilegeGroups = az devops security group list --scope organization ` --query "graphGroups[?displayName=='Organization Owners' || displayName=='Project Collection Administrators'].descriptor" ` -o tsv - 再循环获取这些组的成员:
$highPrivilegeUsers = @() foreach ($group in $highPrivilegeGroups) { $members = az devops security group member list --group-descriptor $group ` --query "members[].{name:displayName, email:uniqueName, descriptor:descriptor}" ` -o json | ConvertFrom-Json $highPrivilegeUsers += $members } - 最后把这些高权限用户和你原有项目级查询到的特权用户合并、去重,就是完整的特权访问用户列表
关于EffectiveAllow=112的说明
你看到的EffectiveAllow=112是因为这些高权限用户在项目级没有直接配置权限,112对应的是Read、View project-level information这类基础权限,但他们的实际特权来自更高层级的继承,所以单独查项目级命名空间是识别不出来的,必须单独处理这些内置高权限组。
内容的提问来源于stack exchange,提问作者JohnLBevan
相关产品推荐
相关产品推荐

