TFS SDK 10 ——分组(Group)和成员(Member)

这篇来介绍怎样读取TFS服务器上的用户信息

首先TFS默认有如下分组(Group):

SharePoint Web Application Services

Team Foundation Administrators

Team Foundation Proxy Service Accounts

Team Foundation Service Accounts

Team Foundation Valid Users

Work Item Only View Users

其中

Team Foundation Valid Users 包含其他所有分组

Team Foundation Administrators 包含 Team Foundation Service Accounts

然后每一个Collection也有类似如上的默认分组,及同样的包含关系

Project Collection Administrators

Project Collection Build Administrators

Project Collection Build Service Accounts

Project Collection Proxy Service Accounts

Project Collection Service Accounts

Project Collection Test Service Accounts

Project Collection Valid Users

其中

Project Collection Valid Users 包含其他所有分组

Project Collection Administrators包含Project Collection Service Accounts

我们可以在TFS server 端看到这些。

using Microsoft.TeamFoundation.Client;

using Microsoft.TeamFoundation.Server;

using Microsoft.TeamFoundation.VersionControl.Client;

//连接TFS
string tpcURL = "http://127.0.0.1:8080/tfs/defaultcollection";
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(tpcURL));
IGroupSecurityService gss = (IGroupSecurityService)tpc.GetService(typeof(IGroupSecurityService));//所有关于分组和成员的相关的操作都是基于IGroupSecurityService的。
//1:获取全部用户
//先查出用户的Id。参数 QueryMembership 指定是否包含其下从属分组的用户
Identity sids = gss.ReadIdentity(SearchFactor.AccountName, "Team Foundation Valid Users", QueryMembership.Expanded);

//通过id获取用户的信息,包括名称,邮箱等等
var members = gss.ReadIdentities(SearchFactor.Sid, sids.Members, QueryMembership.Expanded);

 //2:获取指定项目下的所有分组
VersionControlServer version = tpc.GetService(typeof(VersionControlServer)) as VersionControlServer;
TeamProject[] allProjects = version.GetAllTeamProjects(true);
string projectUrl = allProjects[].ArtifactUri.AbsoluteUri;
Identity[] groups = gss.ListApplicationGroups(projectUrl);
//3:添加分组
string groupName = "MyGroup";
string desp = "My Group Description";
string groupSid = gss.CreateApplicationGroup(projectUrl, groupName, desp);
//4: 删除分组
gss.DeleteApplicationGroup(groupSid);
//5:获取指定分组下的成员
Identity group = groups[];
var gsids = gss.ReadIdentity(SearchFactor.Sid, group.Sid, QueryMembership.Expanded);
Identity[] gmembers = gss.ReadIdentities(SearchFactor.Sid, gsids.Members, QueryMembership.Expanded);
//成员不一定是指用户(User) ,也可能是分组(Group)
//成员的类型有如下几种:
//gmembers[0].Type== IdentityType.ApplicationGroup;
//gmembers[0].Type== IdentityType.InvalidIdentity
//gmembers[0].Type== IdentityType.UnknownIdentityType
//gmembers[0].Type== IdentityType.WindowsGroup
//gmembers[0].Type== IdentityType.WindowsUser

//6:把指定成员添加到指定分组
string memberSid = gmembers[].Sid;
gss.AddMemberToApplicationGroup(group.Sid, memberSid);
//7:把指定成员从指定分组移除
gss.RemoveMemberFromApplicationGroup(group.Sid, memberSid);

TFS二次开发10——分组(Group)和成员(Member)的更多相关文章

  1. TFS二次开发系列索引

    TFS二次开发11——标签(Label) TFS二次开发10——分组(Group)和成员(Member) TFS二次开发09——查看文件历史(QueryHistory) TFS二次开发08——分支(B ...

  2. TFS二次开发、C#知识点、SQL知识

    TFS二次开发.C#知识点.SQL知识总结目录   TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一 ...

  3. TFS二次开发系列:三、TFS二次开发的第一个实例

    首先我们需要认识TFS二次开发的两大获取服务对象的类. 他们分别为TfsConfigurationServer和TfsTeamProjectCollection,他们的不同点在于可以获取不同的TFS ...

  4. TFS二次开发、C#知识点、SQL知识总结目录

    TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一个实例 TFS二次开发系列:四.TFS二次开发Wor ...

  5. TFS二次开发系列:七、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)

    在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一:连接TFS服务器,并且得到之后需要使用到的类方法. /// < ...

  6. TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)

    TFS二次开发的数据统计以PBI.Bug.Sprint等为例(一) 在TFS二次开发中,我们可能会根据某一些情况对各个项目的PBI.BUG等工作项进行统计.在本文中将大略讲解如果进行这些数据统计. 一 ...

  7. TFS二次开发02——连接TFS

    在上一篇<TFS二次开发01——TeamProjectsPicher>介绍了  TeamProjectsPicher 对象,使用该对象可以很简单的实现连接TFS. 但是如果我们要实现自定义 ...

  8. TFS二次开发-基线文件管理器(5)-源码文件的读取

      在上一节中,我们在保存标签之前,已经将勾选的文件路径保存到了Listbox中,这里只需要将保存的数据输出去为txt文档就可以做版本控制了.   版本文件比较复杂的是如何读取,也就是如何通过文件路径 ...

  9. TFS二次开发系列:五、工作项查询

    本节将讲述如何查询工作项,用于二次开发中定义获取工作项列表. 使用WorkItemStore.Query方法进行查询工作项,其使用的语法和SQL语法类似: Select [标题] from worki ...

随机推荐

  1. springboot+swagger2案例

    1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  2. [Unity官方文档翻译]Primitive and Placeholder Objects Unity原生3D物体教程

    Primitive and Placeholder Objects 原始的基础物体 Unity can work with 3D models of any shape that can be cre ...

  3. iptables相关操作以及简单理解端口和服务之间关系

    一般CentOS7默认安装的是firewall不是iptables 1.查看firewall状态 firewall-cmd --state 关闭后显示not running,开启后显示running ...

  4. mysql和连接相关的timeout

    MySQL和连接相关的timeout 今天同事问为什么查询mysql库时, 在数据量比较大时,会话总断.刚开始以为是mysql的和连接有关timeout的问题,结果是网络的不稳定的原因. 下面总结下和 ...

  5. PostgreSQL存储过程(5)-异常错误处理

    1. 异常错误处理 在PL/pgSQL函数中,如果没有异常捕获,函数会在发生错误时直接退出,与其相关的事物也会随之回滚.我们可以通过使用带有EXCEPTION子句的BEGIN块来捕获异常并使其从中恢复 ...

  6. PHP代码执行函数总结

    PHP中可以执行代码的函数,常用于编写一句话木马,可能导致代码执行漏洞,这里对代码执行函数做一些归纳. 常见代码执行函数,如 eval().assert().preg_replace().create ...

  7. SpringBoot(二)-- 支持JSP

    SpringBoot虽然支持JSP,但是官方不推荐使用.看网上说,毕竟JSP是淘汰的技术了,泪奔,刚接触 就淘汰.. SpringBoot集成JSP的方法: 1.配置application.prope ...

  8. nessus 激活码

    nessus激活码的申请 nessus屏蔽了中国的激活码申请,中国IP申请的时候会直接跳转到购买商业版的页面. 解决方法: 使用IE代理或者VPN,用美国的IP最好,然后访问网址: http://ww ...

  9. Redis 操作哈希数据

    通常我们将一些结构化的信息打包成哈希映射表,结构如下,key/value 键值对模式不变,但 value 是一个键值对 name: "Tom" age: ...... > h ...

  10. 使用 requests 发送 POST 请求

    POST请求也就是向服务器提交数据,通常我们用来提交表单数据: import requests postdata = { //定义表单数据 "username": "ab ...