2012-04-26 5 views
0

TFSオブジェクトモデルを使用する場合、アイテムレベルのACLはVersionControlServer.SetPermissionsメソッドで設定できます。このメソッドは、PermissionChangeが継承するSecurityChangeオブジェクトの配列をとります。 PermissionChangeクラスは、許可の許可、拒否のアクセス許可、および削除のための文字列の配列をとります(特定のアクセス許可をunsetに戻すため)。これらのアイテムレベルのアクセス許可は、VersionControlServer.GetPermissionsメソッドで表示できます。TFS:アイテムのアクセス許可オブジェクトをバージョンコントロールから削除できますか?

VersionControlServer.SetPermissionsメソッドでアイテムレベルのアクセス許可を設定すると、そのアイテムのサーバーパスにServerItemが設定された新しいアクセス許可オブジェクトが作成されます。アクセス許可オブジェクトには、そのユーザーまたはグループのすべてのアクセス許可が継承されていても、ソースコントロールの項目の上に定義された各ユーザーまたはグループのエントリを含むEntriesプロパティがあります。さらに、アイテムに以前に設定された権限をリセットしても、権限オブジェクトは継承されていないエントリを含んでいなくてもサーバー上に残ります。

つまり、これらのアクセス許可オブジェクトのサイズは時間の経過と共に厳しくなっているようです。これらのメソッドのパフォーマンスは、(ブランチレベルなどで)大量の情報が返されるために苦しみ始めています。これらのメソッドを削除するためのRemovePermissionsメソッドはわかりません。そんなことがあるの?これらのアイテムを永久に削除して、そのアイテムがサーバ上で定義されたクラッタオブジェクトなしでACLを継承できるようにするにはどうすればよいですか?

+0

使用しているTFSサーバーのバージョンは何ですか? 2010年以降の場合は修正する方法があり、それを説明することができます。 –

+0

私たちはtfs 2010を使用しています。 – bwerks

+0

ご質問がある場合は下記をご覧ください。 –

答えて

-1

あなたがしたいように見えることはできません。最善の方法はBuck Hodgesに連絡し、彼に直接尋ねることです。

可能であれば、Microsoft.TeamFoundation.VersionControl.Server名前空間(クライアントではなくバージョンコントロールのサーバー)で回答を見つけることができます。

ドキュメントを見て、そのような機能が見つかりませんでした。

1

2010年、TFSは、製品のすべてのアクセス許可を管理する新しいセキュリティサービスを導入しました。各パーミッショングループは、セキュリティ名前空間に分割されています。この機能を公開する新しいサービスを使用して、必要なものを達成することができます。私は以下のこのコードをテストしていないが、それはあなたを閉じる必要があります。

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

はあなたがすべての問題をヒットした場合、私に教えてください。

関連する問題