TFS API - 如何仅返回经过身份验证的用户有权访问的项目,而不是整个列表?

use*_*764 2 c# tfs tfs-sdk

我目前正在使用api从TFS返回一个项目列表.

var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("some URI"));
var store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));
var projects = store.Projects
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,它会返回每个用户的完整TFS团队项目列表.有没有办法返回或过滤列表,以便只返回特定用户有权访问的项目?

这是使用TFS 2010.

Mic*_*eld 6

在TFS 2010中,我相信您可以通过在拨打电话时冒充您感兴趣的用户来实现此目的.

TFS 2010 API允许(正确授权)应用程序"模拟"您想要的任何有效用户并以该用户身份执行操作.这是"授权"模拟 - 您没有作为另一个用户进行身份验证,因此没有密码输入,但您正在"代表"另一个用户执行操作.您需要具有特定的权限才能执行此操作,因此您的应用程序实际上需要以"代表其他用户发出请求"权限的用户身份运行.

完成后,代码非常简单.您提取您从TPC想要的身份再建立第二个"假冒"一个不同的环境下,并使用第二方面为您的实际工作:

var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("some URI"));
var identityService = tfs.GetService<IIdentityManagementService>();
var identity = identity = identityService.ReadIdentity(
        IdentitySearchFactor.AccountName,
        "someuser", 
        MembershipQuery.None, 
        ReadIdentityOptions.None);

var userTfs = new TfsTeamProjectCollection(tfs.Uri, identity.Descriptor);
Run Code Online (Sandbox Code Playgroud)

您采取的任何行动都userTfs将像指定的用户名一样完成; 这允许您代表其他用户查询项目,队列构建等.