TFS API—如何只返回经过身份验证的用户具有权限的项目,而不是整个列表
本文关键字:项目 权限 列表 用户 API 返回 TFS 身份验证 经过 | 更新日期: 2023-09-27 18:01:33
我目前正在使用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 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
}