2012-02-27 26 views
5

Chúng tôi là một dự án khá lớn với một nhánh thân cây duy nhất. Hầu hết nó sử dụng quyền mặc định, nhưng một vài thư mục có quyền tùy chỉnh - giả sử, chỉ nhóm "Nhà xây dựng" mới được phép đăng ký.Xóa các quyền đặc biệt từ các thư mục trong một chi nhánh

Chúng tôi muốn cho phép mọi người tạo chi nhánh riêng của họ ra khỏi thân cây, nơi họ có thể tự do đăng ký và hợp nhất sau (hy vọng thường xuyên). Tuy nhiên, tạo một nhánh, các quyền đặc biệt được sao chép cùng với các thư mục, có nghĩa là mọi người không thể tự do đăng ký vào chi nhánh của họ.

  • Có cách nào để xóa các quyền đặc biệt từ chi nhánh hoặc thư mục không?
  • Có cách nào để tự động làm như vậy, vì vậy bất kỳ ai tạo chi nhánh trong/riêng tư/** sẽ không gặp sự cố này?

Trả lời

6

Tôi phát hiện ra khoảng tf permission (Ví dụ: tf permission /inherit:yes itemSpec). Tuy nhiên, chuyển đổi/đệ quy không hoạt động với nó. Tôi đoán tôi có thể viết một cái gì đó chạy nó một cách đệ quy ...

Edit: cuối cùng tôi nhận được xung quanh để viết một công cụ cho nó:

static int Main(string[] args) 
{ 
    if (args.Length == 0 || args.Any(a => !a.StartsWith("$/"))) 
    { 
     Console.WriteLine("Removes all explicit permissions and enables inheritance for a subtree.\n" 
         + "Example: " + Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location) + " $/project/path1 $/project/path2"); 
     return 3; 
    } 

    WorkspaceInfo wi = Workstation.Current.GetLocalWorkspaceInfo(Environment.CurrentDirectory); 
    if (wi == null) 
    { 
     Console.WriteLine("Can't determine workspace for current directory: " + Environment.CurrentDirectory); 
     return 2; 
    } 

    var Tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(wi.ServerUri); 
    VersionControlServer VersionControlServer = Tfs.GetService<VersionControlServer>(); 

    Console.WriteLine("Server: {0} Getting permissions...", wi.ServerUri); 
    ItemSecurity[] perms = VersionControlServer.GetPermissions(args, RecursionType.Full); 

    Console.WriteLine("Will remove explicit permissions from the following items:"); 

    var changes = new List<SecurityChange>(); 
    foreach (ItemSecurity perm in perms) 
    { 
     Console.WriteLine(" " + perm.ServerItem); 

     changes.Add(new InheritanceChange(perm.ServerItem, inherit: true)); 
     foreach (AccessEntry e in perm.Entries) 
     { 
      changes.Add(new PermissionChange(perm.ServerItem, e.IdentityName, null, null, PermissionChange.AllItemPermissions)); 
     } 
    } 

    Console.WriteLine("Enter to confirm:"); 
    Console.ReadLine(); 

    var successfulchanges = VersionControlServer.SetPermissions(changes.ToArray()); 
    if (successfulchanges.Length == changes.Count) 
    { 
     Console.WriteLine("Explicit permissions removed from all items"); 
     return 0; 
    } 
    else 
    { 
     Console.WriteLine("Explicit permissions removed only from:"); 
     foreach (var c in successfulchanges) 
     { 
      Console.WriteLine(" " + c.Item); 
     } 

     return 1; 
    } 
} 
+3

Cảm ơn cho điều này, tôi đã chỉ cần bỏ ra một giờ cố gắng để xóa một nhánh vì một số quyền rõ ràng ngớ ngẩn. Cod này cố định nó trong 2 giây :) – DaveShaw

+0

Bạn thực thi mã này ở đâu? Bạn có thể nói cách bạn sử dụng nó? Tôi bị mắc kẹt với những gì tôi tin là một điều tương tự với sự cho phép của một số thư mục ngăn cản tôi xóa hoặc đổi tên một chi nhánh. –

+0

@ mats-isaksson tạo ứng dụng giao diện điều khiển mới –

Các vấn đề liên quan