使用服务用户获取Azure DevOps自定义字段工作项时的权限问题
问题分析与解决方案
核心原因
你的WIQL查询未明确限定项目范围,加上服务用户可能拥有跨项目的访问权限,导致返回了所有该用户有权限查看的项目(包括Project A)中符合条件的工作项。而之前使用的PAT可能仅被授予了Project B的权限,所以不会出现这个问题。
解决步骤
1. 修改WIQL查询,强制限定项目范围
在查询的WHERE子句中添加项目过滤条件,确保只返回Project B的工作项:
{ "query": "SELECT [System.ID] FROM WorkItems WHERE [Custom.VersionforRMBot] CONTAINS 'custom_field' AND [System.TeamProject] = 'Project B' ORDER BY [Microsoft.VSTS.Common.Priority] ASC, [System.CreatedDate] DESC" }
2. 检查服务用户的权限配置
- 确认服务用户是否拥有组织/项目集合级别的权限(比如项目集合管理员):这类权限会让用户默认能访问所有项目的工作项,即使你在API请求中指定了Project B。如果不需要,移除该用户的组织级高权限。
- 检查服务用户在Project A的权限:确认它是否被意外授予了Project A的工作项读取权限,若有则移除该权限。
3. 验证API端点的行为
虽然请求URL指定了ProjectB,但ADO的WIQL API默认不会自动将查询范围限定在该项目内——它会返回当前认证用户有权限访问的所有项目中符合查询条件的结果。必须通过WIQL语句中的[System.TeamProject]条件来明确限定范围。
内容的提问来源于stack exchange,提问作者Nyeste Ágoston
相关产品推荐
相关产品推荐

