2009-08-17 51 views
3

我想將文件夾的安全設置應用於C#中的所有後代。從本質上講,我想做'在[文件夾]的高級安全設置'中用'替換來自此對象的可繼承權限的所有後代的所有現有可繼承權限'。遞歸安全設置

有沒有什麼優雅的方法來解決這個問題?

回答

3

經過一些時間與谷歌和MSDN,我想出了下面的代碼位內的一些其他有價值的工具。似乎工作得很好。

static void Main(string[] args) 
{ 
    DirectoryInfo dInfo = new DirectoryInfo(@"C:\Test\Folder"); 
    DirectorySecurity dSecurity = dInfo.GetAccessControl(); 
    ReplaceAllDescendantPermissionsFromObject(dInfo, dSecurity); 
} 

static void ReplaceAllDescendantPermissionsFromObject(
    DirectoryInfo dInfo, DirectorySecurity dSecurity) 
{ 
    // Copy the DirectorySecurity to the current directory 
    dInfo.SetAccessControl(dSecurity); 

    foreach (FileInfo fi in dInfo.GetFiles()) 
    { 
     // Get the file's FileSecurity 
     var ac = fi.GetAccessControl(); 

     // inherit from the directory 
     ac.SetAccessRuleProtection(false, false); 

     // apply change 
     fi.SetAccessControl(ac); 
    } 
    // Recurse into Directories 
    dInfo.GetDirectories().ToList() 
     .ForEach(d => ReplaceAllDescendantPermissionsFromObject(d, dSecurity)); 
} 
+0

謝謝,沒有任何問題。你讓我走在正確的道路上 – ccook 2009-08-20 14:18:28