2011-05-10 11 views
9

मेरे पास एक सी # कोड है जो एक फ़ोल्डर बनाता है और उस पर कुछ अनुमतियां सेट करता है। यहाँ कोड नमूना है:DirectorySecurity सही ढंग से अनुमतियों को सेट नहीं कर रहा है

static void Main(string[] args){ 

     Directory.CreateDirectory("C:\\vk07"); 
     DirectorySecurity dirSec = Directory.GetAccessControl("C:\\vk07"); 

     dirSec.AddAccessRule(new FileSystemAccessRule("INTRANET\\fGLBChorusUsers", FileSystemRights.ReadAndExecute, AccessControlType.Allow));    
     Directory.SetAccessControl("C:\\vk07", dirSec); 
} 

जब मैं अनुमतियाँ, बजाय होने के ऊपर बनाया फ़ोल्डर पर सेट जाँच पढ़ने और संशोधित (जो कि मैं क्या कोड में निर्धारित किया है है), यह केवल "विशेष अनुमतियां" से पता चलता चेक के रूप में।

कृपया कोई मेरी मदद कर सकता है? मैं एसीएल के लिए नया हूं, इसलिए इसे बहुत अच्छी तरह समझ में नहीं आता।

उत्तर

2

FileSystemRights.ReadAndExecute आपको संशोधित करने की अनुमति नहीं देता है। यह केवल पढ़ने के लिए है। आपको पूर्ण सीमा के लिए FileSystemRights.Modify की आवश्यकता होगी। आप उपलब्ध विकल्पों के लिए out जांच सकते हैं।

यहाँ से ऊपर का एक उदाहरण है:

String dir = @"C:\vk07"; 
Directory.CreateDirectory(dir); 
DirectoryInfo dirInfo = new DirectoryInfo(dir); 
DirectorySecurity dirSec = dirInfo.GetAccessControl(); 
dirSec.AddAccessRule(new FileSystemAccessRule("INTRANET\\fGLBChorusUsers",FileSystemRights.Modify,AccessCo‌ntrolType.Allow)); 
dirInfo.SetAccessControl(dirSec); 
+0

हाय, मैंने संशोधित करने की भी कोशिश की। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, मैं केवल उस फ़ोल्डर पर "विशेष अनुमतियां" सेट देख सकता हूं। तो मुझे लगता है कि मैं यहाँ कुछ याद कर रहा हूँ। – Vikram

+0

निम्नलिखित कोड 'स्ट्रिंग डीआईआर = @ "सी: \ vk07" आज़माएं; Directory.CreateDirectory (dir); DirectoryInfo dirInfo = नई निर्देशिकाइन्फो (डीआईआर); DirectorySecurity dirSec = dirInfo.GetAccessControl(); dirSec.AddAccessRule (नया फ़ाइल सिस्टम सिस्टम असफल ("INTRANET \\ fGLBChorusUsers", FileSystemRights.Modify, AccessControlType.Allow)); dirInfo।SetAccessControl (dirSec); ' –

+0

जोड़ने और निकालने का एक अच्छा उदाहरण पाया जा सकता है [यहां] (http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx#Y4947) –

3

मैं भी इस समस्या थी।

var security = Directory.GetAccessControl(folderPath); 
security.AddAccessRule(
    new FileSystemAccessRule(
     new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null), 
     FileSystemRights.Modify, 
     InheritanceFlags.ObjectInherit, 
     PropagationFlags.InheritOnly, 
     AccessControlType.Allow 
    ) 
); 
Directory.SetAccessControl(folderPath, security); 

... इस प्रकार तो folderPath के लिए गुण संवाद दिखेगी:: निम्नलिखित कोड को क्रियान्वित करने के बाद

Folder Properties Dialog

आप उल्लेख किया है, केवल 'विशेष अनुमतियाँ' चेक किया गया, लेकिन अगर आप उन्नत क्लिक करें, तो आप देखते हैं:

Advanced Security Settings Dialog

ध्यान दें कि इस संवाद में नेटवर्क सेवा में संशोधित अनुमति है।

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

+2

मेरे पास एक ही समस्या थी और मैंने पाया कि अलेक्जेंडर वी के सुझाव और प्रचार का उपयोग कर रहे हैं। किसी ने इसे – PlantationGator

9

मुझे यह समस्या हो रही थी, वास्तविक कारण यह है कि यदि आप अन्य पोस्ट से उस नेटवर्क सेवा चित्र को देखते हैं, तो यह केवल फाइलों पर लागू होता है। बुनियादी अनुमतियां केवल पहली तस्वीर पर दिखाई देंगी यदि वे "यह फ़ोल्डर, सबफ़ोल्डर और फ़ाइलें" कहें, ऐसा करने के लिए, आपको दो झंडे सेट करने की आवश्यकता है- इन्टरिटेंसफ्लैग्स। कॉन्टेनर इनहेरिट + इनहेरिटेंसफ्लैग्स। ऑब्जेक्ट इनहेरिट।

Try 
     'If destination directory does not exist, create it first. 
     If Not Directory.Exists(path) Then Directory.CreateDirectory(path) 

     Dim dir As New DirectoryInfo(path) 
     Dim dirsec As DirectorySecurity = dir.GetAccessControl() 
     'Remove inherited permissions 
     dirsec.SetAccessRuleProtection(True, False) 

     'create rights, include subfolder and files to be inherited by this 
     Dim Modify As New FileSystemAccessRule(username, FileSystemRights.Modify, InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow) 
     Dim Full As New FileSystemAccessRule(admingroup, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow) 

     dirsec.AddAccessRule(Modify) 
     dirsec.AddAccessRule(Full) 
     'Set 
     dir.SetAccessControl(dirsec) 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
+0

तय किया है प्रश्न सी # के लिए पूछा गया था? – as9876

3

इस कोड मेरे लिए काम करता है:

security.AddAccessRule(
    new FileSystemAccessRule(
     "domain\\login", 
     FileSystemRights.Modify, 
     InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
     PropagationFlags.None, 
     AccessControlType.Allow 
    )); 
0

मैं VB में काम करने के लिए, FileSystemRights.FullControl की स्थापना एक ही कोड मिला है।

 Dim fsRule As FileSystemAccessRule = New FileSystemAccessRule(sid, FileSystemRights.FullControl, (InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit), PropagationFlags.None, AccessControlType.Allow) 
संबंधित मुद्दे