2012-09-10 12 views
5

देने के दौरान विरासत अनुमतियां खो गईं, मैं एक विशिष्ट उपयोगकर्ता के लिए यूएनसी पथ पर एनटीएफएस अनुमतियां देने की कोशिश कर रहा था, लेकिन मैं यूएनसी पथ के आधार पर अलग-अलग व्यवहार देखता हूं। नीचे दिए गए कोड (MSDN से) जो मैं अनुमतियाँ और प्रत्येक परिदृश्य में परिणाम देने के लिए उपयोग कर रहा हूँ, हैएनटीएफएस अनुमतियों

static void GiveNTFSPermissions(string folderPath, 
           string ntAccountName, 
           FileSystemRights accessRights) 
{ 
    DirectorySecurity dirSecurity = Directory.GetAccessControl(folderPath); 

    FileSystemAccessRule newAccessRule = 
     new FileSystemAccessRule(
       ntAccountName, 
       accessRights, 
       AccessControlType.Allow); 

    dirSecurity.AddAccessRule(newAccessRule); 

    Directory.SetAccessControl(folderPath, dirSecurity); 
} 

मान लीजिए मैं अपने स्थानीय मशीन पर "RootShare" नामक एक हिस्सा है, और किसी अन्य फ़ोल्डर "है InsideRootShare "इसके अंदर।

Scenario1: जब मैं फोन,

GiveNTFSPermissions(@"\\sri-devpc\RootShare", 
        @"domain\username", 
        FileSystemRights.Write); 

इनहेरिट की गई अनुमतियों साझा रास्ते पर खो गए थे,

Scenario2: जब मैं फोन,

GiveNTFSPermissions(@"\\sri-devpc\RootShare\InsideRootShare", 
        @"domain\username", 
        FileSystemRights.Write); 

विरासत अनुमतियां बरकरार थीं।

मैंने FileSystemAccessRule के विभिन्न रचनाकारों के साथ प्रयास किया है लेकिन कोई भाग्य नहीं है।

इस व्यवहार के पीछे क्या कारण है, और इसके लिए कोई कामकाज?

+0

क्या आपने [निर्माता] (http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.filesystemaccessrule.aspx) को आजमाया है जो 'इनहेरिटेंसफ्लैग्स' को तर्क के रूप में लेता है? साथ ही, 'AddNTFSPermission'' GiveNTFSPermissions' से अधिक उचित नाम है, क्योंकि यह मौजूदा एक्सेस नियमों में * नया एक्सेस नियम जोड़ने का प्रयास करता है। – Nawaz

+0

इस विषय को देखें: http://stackoverflow.com/questions/243995/setting-folder-permissions-on-vista – Nawaz

+0

@ नवाज: मैंने सभी रचनाकारों की कोशिश की है, और मेरे पास एक ही परिणाम है। सुझाव के लिए धन्यवाद :) – sri

उत्तर

4

हम ड्रॉपकिक के सुरक्षा मॉड्यूल पर काम करते समय फ़ाइल सिस्टम अनुमति के साथ काम करने वाले समान मुद्दों में भाग गए। हम जिस समाधान के साथ आए थे वह इस प्रकार है। यह फ़ोल्डर पर विरासत नियमों को बदले बिना किसी भी फ़ोल्डर पर सफलतापूर्वक अनुमतियां सेट करेगा।

public void SetFileSystemRights(string target, string group, FileSystemRights permission) 
    { 
     if (!IsDirectory(target) && !IsFile(target)) 
      return; 

     var oldSecurity = Directory.GetAccessControl(target); 
     var newSecurity = new DirectorySecurity(); 

     newSecurity.SetSecurityDescriptorBinaryForm(oldSecurity.GetSecurityDescriptorBinaryForm()); 

     var accessRule = new FileSystemAccessRule(group, 
                permission, 
                InheritanceFlags.None, 
                PropagationFlags.NoPropagateInherit, 
                AccessControlType.Allow); 
     bool result; 
     newSecurity.ModifyAccessRule(AccessControlModification.Set, accessRule, out result); 

     if (!result) Log.AddError("Something wrong happened"); 

     accessRule = new FileSystemAccessRule(group, 
               permission, 
               InheritanceFlags.ContainerInherit | 
               InheritanceFlags.ObjectInherit, 
               PropagationFlags.InheritOnly, 
               AccessControlType.Allow); 

     result = false; 
     newSecurity.ModifyAccessRule(AccessControlModification.Add, accessRule, out result); 
     if (!result) Log.AddError("Something wrong happened"); 

     Directory.SetAccessControl(target, newSecurity); 

     if (result) Log.AddGood("Permissions set for '{0}' on folder '{1}'", group, target); 

     if (!result) Log.AddError("Something wrong happened"); 
    } 

मिला the link that I originally used to figure this out

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