繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM