TFS:是否可以从版本控制中删除项目权限对象?
使用TFS对象模型时,可以使用VersionControlServer.SetPermissions方法设置项目级ACL。此方法接受PermissionChange继承的SecurityChange对象数组。 PermissionChange类为允许权限,拒绝权限和删除(为了将某个权限重置为未设置)接受字符串数组。然后可以使用VersionControlServer.GetPermissions方法查看这些项级权限。TFS:是否可以从版本控制中删除项目权限对象?
当项目级权限的设定由VersionControlServer.SetPermissions方法,一个新的权限对象被设置为用于该项目的服务器路径的ServerItem创建。权限对象具有一个Entries属性,该属性包含在源控件中的项目上定义的每个用户或组的所有条目,即使该用户或组的所有权限都被继承。此外,即使重置以前在项目上设置的权限,权限对象仍保留在服务器上,即使它不包含未继承的条目。
总之,似乎随着时间的推移,这些权限的大小对象是严格递增。由于大量信息被返回(例如在分支级别),这些方法的性能开始受到影响,并且我不知道任何种类的RemovePermissions方法来清除这些方法。这样的事情存在吗?我该如何去除这些永久性的东西,以便这些项目能够透明地继承它们的ACL,而不会在服务器上定义这些混乱对象?
看起来你想做什么是不可能的。最好的方法是联系Buck Hodges并直接询问他。
如果有可能,你会发现在Microsoft.TeamFoundation.VersionControl.Server命名你的答案(这是版本控制的服务器,而不是客户端的一个)。
查看文档后我找不到这种功能。
在2010年,TFS介绍了管理产品中的所有权限的新安全服务。每个permision组被分解成一个安全名称空间。您可以使用公开此功能的新服务实现您想要的功能。我没有在下面测试这个代码,但它应该让你关闭。
首先,添加这些引用:
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.VersionControl.Common;
然后运行该代码:
// Somehow define which paths you want to delete security on.
string[] pathsToDeleteSecurityOn = new string[0];
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri("http://your-server:8080/tfs/your-collection"));
ISecurityService securityService = tpc.GetService<ISecurityService>();
// Get the version control security namespace
SecurityNamespace vcSecurity = securityService.GetSecurityNamespace(SecurityConstants.RepositorySecurityNamespaceGuid);
// Delete the ACLs on each path
foreach (string path in pathsToDeleteSecurityOn)
{
vcSecurity.RemoveAccessControlLists(path, false);
}
让我知道如果你打任何问题。
您使用的是什么版本的TFS服务器?如果是2010年或更晚,有一种解决方法,我可以解释这一点。 – 2012-04-27 15:10:51
我们正在使用tfs 2010,是的。 – bwerks 2012-04-27 16:00:50
看到下面,让我知道你是否有任何问题。 – 2012-04-29 20:37:16