获得用户所属的特定项目

时间:2014-08-19 16:29:31

标签: c# tfs

这里我使用IIdentityManagementService按名称检索指定的用户。现在我想只检索他们所属的团队项目,并且可以在TFS中创建任务/工作项。我的程序允许用户在TFS中创建任务,我只希望他们能够查看他们有权访问的项目列表,以创建任务/工作项。

var tfsTpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://dotnettfs:8080/tfs/"));
identityService = tfsTpc.GetService<IIdentityManagementService>();
userId = identityService.ReadIdentity(
  IdentitySearchFactor.DisplayName,
  strOutlookUser,
  MembershipQuery.Direct,
  ReadIdentityOptions.None
);

userTpc = new TfsTeamProjectCollection(tfsTpc.Uri, userId.Descriptor);
cssService = (ICommonStructureService4)userTpc.GetService(typeof(ICommonStructureService4));

 wis = userTpc.GetService<WorkItemStore>();
 lstAllProjects.AddRange(cssService.ListAllProjects().ToList());
 List<string> lstViewProjectNames = lstAllProjects.Select(a => a.Name).ToList();

现在,当我希望它只显示检索到的用户有权访问的项目时,该列表会显示该软件集合中的所有项目。

然后他们就可以创建一个任务并为其中一个项目指定迭代和区域。

var store = wis.Projects[0]; //should be a specified project, not the first element.
WorkItem pbi = new WorkItem(store.WorkItemTypes["Product Backlog Item"]);

pbi.IterationPath = lstIterations.Where(a => a.Name == selectedIteration.ToString())
                      .Select(a => a.Path).First().ToString();


pbi.AreaPath = lstAreas.Where(a => a.Name == selectedArea.ToString())
                      .Select(a => a.Path).First().ToString();

1 个答案:

答案 0 :(得分:0)

  

我只希望他们能够看到他们的项目列表   有权创建任务/工作项目。

工作项目与区域相关联,区域与团队项目相关联。

基本步骤是:

1)以有问题的用户身份连接到TFS

2)检索有问题的团队项目

3)获取有问题的团队项目的区域

4)检查每个人是否有能力创建工作项(你可以放弃对根区域节点进行递归检查)

您需要的使用(可能不需要全部):

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework.Common;
using Microsoft.TeamFoundation.Server;
using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;

IIdentityManagementService identityManagementService = tpc.GetService<IIdentityManagementService>();
TfsTeamProjectCollection tpc = GetTfsCollection();
TeamFoundationIdentity identity = identityManagementService.ReadIdentity(IdentitySearchFactor.AccountName, @"Domain\username", MembershipQuery.None, ReadIdentityOptions.None);
TfsTeamProjectCollection impersonatedTPC = new TfsTeamProjectCollection(new Uri(this._tfsUri, this._tfsCollectionName), identity.Descriptor);
WorkItemStore impersonatedWIS = impersonatedTPC.GetService<WorkItemStore>();
ProjectCollection impersonatedProjects = impersonatedWIS.Projects;
foreach (Project p in impersonatedProjects)
{
    if (p.Name == "My Team Project")
    {
        NodeCollection areas = p.AreaRootNodes;
        foreach (Node area in areas)
        {
            if (area.HasWorkItemWriteRightsRecursive)
            {
                //They do have rights
            }
        }
    }
}

请注意,我调用了我自己的用户定义函数的GetTfsCollection()(这只是我构造的类,传入根tfs uri,集合名称作为字符串)。我也没有进行任何异常处理,只是展示了基础知识:

private TfsTeamProjectCollection GetTfsCollection()
{
    return TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(this._tfsUri, this._tfsCollectionName));            
}