2

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

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

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

这是使用 TFS 2010。

4

2 回答 2

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

您执行的任何操作都userTfs将像指定的用户名一样执行;这允许您代表其他用户查询项目、队列构建等。

于 2013-02-27T23:06:58.647 回答
1

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

using (var tfs = new TfsTeamProjectCollection(tfsUri, CredentialCache.DefaultCredentials))
            {
                var store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));
                var projects = store.Projects                
            }
于 2013-02-28T11:12:49.280 回答