2012-04-26 74 views
0

使用TFS對象模型時,可以使用VersionControlServer.SetPermissions方法設置項目級ACL。此方法接受PermissionChange繼承的SecurityChange對象數組。 PermissionChange類爲允許權限,拒絕權限和刪除(爲了將某個權限重置爲未設置)接受字符串數組。然後可以使用VersionControlServer.GetPermissions方法查看這些項級權限。TFS:是否可以從版本控制中刪除項目權限對象?

當項目級權限的設定由VersionControlServer.SetPermissions方法,一個新的權限對象被設置爲用於該項目的服務器路徑的ServerItem創建。權限對象具有一個Entries屬性,該屬性包含在源控件中的項目上定義的每個用戶或組的所有條目,即使該用戶或組的所有權限都被繼承。此外,即使重置以前在項目上設置的權限,權限對象仍保留在服務器上,即使它不包含未繼承的條目。

總之,似乎隨着時間的推移,這些權限的大小對象是嚴格遞增。由於大量信息被返回(例如在分支級別),這些方法的性能開始受到影響,並且我不知道任何種類的RemovePermissions方法來清除這些方法。這樣的事情存在嗎?我該如何去除這些永久性的東西,以便這些項目能夠透明地繼承它們的ACL,而不會在服務器上定義這些混亂對象?

+0

您使用的是什麼版本的TFS服務器?如果是2010年或更晚,有一種解決方法,我可以解釋這一點。 – 2012-04-27 15:10:51

+0

我們正在使用tfs 2010,是的。 – bwerks 2012-04-27 16:00:50

+0

看到下面,讓我知道你是否有任何問題。 – 2012-04-29 20:37:16

回答

-1

看起來你想做什麼是不可能的。最好的方法是聯繫Buck Hodges並直接詢問他。

如果有可能,你會發現在Microsoft.TeamFoundation.VersionControl.Server命名你的答案(這是版本控制的服務器,而不是客戶端的一個)。

查看文檔後我找不到這種功能。

1

在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); 
} 

讓我知道如果你打任何問題。

相關問題