![](/img/trans.png)
[英]How do I get a list of connected TFS projects in Visual Studio?
[英]TFS API - how do I return only projects that an authenticated user has permissions to, instead of the whole list?
我目前正在使用api从TFS返回一个项目列表。
var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("some URI"));
var store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));
var projects = store.Projects
这很好用。 但是,它将为每个用户返回我们的TFS团队项目的完整列表。 有没有一种方法可以返回或过滤列表,以便仅返回特定用户有权访问的项目?
这是使用TFS 2010。
在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
采取的任何操作都会像指定的用户名一样执行; 这使您可以代表其他用户查询项目,队列构建等。
如果using System.net
添加,则可以使用凭据缓存,并在获取集合时将当前用户的默认凭据传递给TFS。
using (var tfs = new TfsTeamProjectCollection(tfsUri, CredentialCache.DefaultCredentials))
{
var store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));
var projects = store.Projects
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.