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

时间:2013-02-27 22:51:30

标签: 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

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

这是使用TFS 2010。

2 个答案:

答案 0 :(得分:6)

在TFS 2010中,我相信您可以在拨打电话时通过impersonating感兴趣的用户执行此操作。

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);

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

答案 1 :(得分:1)

如果添加using System.net,则可以使用凭据缓存并在获取集合时将当前用户的默认凭据传递给TFS

using (var tfs = new TfsTeamProjectCollection(tfsUri, CredentialCache.DefaultCredentials))
            {
                var store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));
                var projects = store.Projects                
            }