我目前正在使用api从TFS返回一个项目列表。
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("some URI"));
var store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));
var projects = store.Projects
这很好用。但是,它会返回每个用户的完整TFS团队项目列表。有没有办法返回或过滤列表,以便只返回特定用户有权访问的项目?
这是使用TFS 2010。
答案 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
}