2012-04-26 3 views
0

При использовании объектной модели TFS, ACL уровня элемента можно установить с помощью метода VersionControlServer.SetPermissions. Этот метод принимает массив объектов SecurityChange, которые PermissionChange наследует. Класс PermissionChange принимает массивы строк для Разрешить разрешения, Запретить разрешения и Удаляет (чтобы сбросить определенное разрешение обратно, чтобы отменить). Эти разрешения на уровне элементов можно просмотреть с помощью метода VersionControlServer.GetPermissions.TFS: Можно ли удалить объекты разрешений объектов из управления версиями?

Когда права доступа на уровне элемента заданы с помощью метода VersionControlServer.SetPermissions, создается новый объект разрешений с параметром ServerItem, установленным для пути к серверу для этого элемента. Объект разрешений имеет свойство «Записи», которое содержит запись для каждого пользователя или группы, определенных выше элемента управления источником, даже если все разрешения для этого пользователя или группы наследуются. Кроме того, даже при сбросе разрешений, ранее установленных для элемента, объект разрешений остается на сервере, хотя он не содержит записей, которые не наследуются.

Короче говоря, похоже, что с течением времени размер этих объектов разрешений строго возрастает. Производительность этих методов начинает страдать из-за большого количества возвращаемой информации (например, на уровне филиала), и я не знаю метода RemovePermissions любого типа для их очистки. Существует ли такая вещь? Как я могу удалить их навсегда, чтобы объекты просто прозрачно наследовали свои ACL без этих беспорядочных объектов, определенных на сервере?

+0

Какую версию сервера TFS вы используете? Если это 2010 или позже, есть способ исправить это, и я могу это объяснить. –

+0

Мы используем tfs 2010, да. – bwerks

+0

См. Ниже и дайте мне знать, если у вас есть вопросы. –

ответ

-1

Похоже, что вы хотите сделать, это невозможно. Лучший способ быть уверенным в том, чтобы связаться с Buck Hodges и спросить его напрямую.

Если возможно, вы найдете свой ответ в пространстве имен Microsoft.TeamFoundation.VersionControl.Server (который является сервером Control Version, а не клиентским).

Я не мог найти такую ​​функцию после просмотра документа.

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

Позвольте мне знать, если вы попали какие-либо вопросы.

Смежные вопросы