2009-10-07 10 views
5

मेरे पास एक ऐसा प्रोग्राम है जो उपयोगकर्ता आउटपुट के लिए एक सुरक्षित निर्देशिका बना रहा है। यह सही तरीके से काम कर रहा है, लेकिन जिन फाइलों में मैं इसे बना रहा हूं (या इसकी प्रतिलिपि) केवल व्यवस्थापक पहुंच के साथ समाप्त हो रहे हैं।फ़ाइल अनुमतियों को निर्देशिका अनुमतियों का उत्तराधिकारी नहीं है

DirectoryInfo outputDirectory = 
      baseOutputDirectory.CreateSubdirectory(outputDirectoryName, 
      GetDirectorySecurity(searchHits.Request.UserId)); 

... 

private DirectorySecurity GetDirectorySecurity(string owner) 
{ 
    const string LOG_SOURCE = "GetDirectorySecurity"; 
    DirectorySecurity ds = new DirectorySecurity(); 

    System.Security.Principal.NTAccount ownerAccount = 
     new System.Security.Principal.NTAccount(owner); 

    ds.SetOwner(ownerAccount); 

    ds.AddAccessRule(
     new FileSystemAccessRule(owner, 
     FileSystemRights.FullControl, 
     AccessControlType.Allow)); 

    //AdminUsers is a List<string> that contains a list from configuration 
    // That represents the admins who should be allowed 
    foreach (string adminUser in AdminUsers) 
    { 
     ds.AddAccessRule(
      new FileSystemAccessRule(adminUser, 
      FileSystemRights.FullControl, 
      AccessControlType.Allow)); 
    } 
    return ds; 
} 

/// <summary> 
/// This method copies any static supporting files, such as javascripts 
/// </summary> 
/// <param name="outputDirectory"></param> 
private void CopySupportingFiles(DirectoryInfo outputDirectory) 
{ 
    foreach (FileInfo file in SupportingFiles) 
    { 
     file.CopyTo(
      Path.Combine(outputDirectory.FullName, file.Name)); 
    } 
} 

आदि, आदि, आदि

क्या मैं गलत कर रहा हूँ? अनुमति कैस्केडिंग क्यों नहीं हैं?

उत्तर

3

ऐसा लगता है कि आपको InheritanceFlags और PropagationFlags को DirectorySecurity सेट करते समय सेट करना चाहिए (मुझे विश्वास है कि आपने जो कुछ भी मैन्युअल रूप से सेट किया है उसे ओवरराइट करें)।

private DirectorySecurity GetDirectorySecurity(string owner) 
{ 
    const string LOG_SOURCE = "GetDirectorySecurity"; 
    DirectorySecurity ds = new DirectorySecurity(); 

    System.Security.Principal.NTAccount ownerAccount = 
     new System.Security.Principal.NTAccount(owner); 

    ds.SetOwner(ownerAccount); 

    ds.AddAccessRule(
     new FileSystemAccessRule(owner, 
     FileSystemRights.FullControl, 
     InheritanceFlags.ObjectInherit, 
     PropagationFlags.InheritOnly, 
     AccessControlType.Allow)); 

    //AdminUsers is a List<string> that contains a list from configuration 
    // That represents the admins who should be allowed 
    foreach (string adminUser in AdminUsers) 
    { 
     ds.AddAccessRule(
      new FileSystemAccessRule(adminUser, 
      FileSystemRights.FullControl, 
      InheritanceFlags.ObjectInherit, 
      PropagationFlags.InheritOnly, 
      AccessControlType.Allow)); 
    } 
    return ds; 
} 
+0

यह समझ में आता है स्कॉट, मुझे इसे आज़माएं। –

संबंधित मुद्दे