First, we will have to add the proper namespaces to our project.
using System.Security.Principal; using System.Security.AccessControl;
Next we will write a recursive function to traverse the directories in a given parent folder.
private void TraverseDirectories(string srcDir) { string[] subdirEntries = Directory.GetDirectories(srcDir); foreach (string subDir in subdirEntries) { GetDirSecurity(subDir); TraverseDirectories(subDir); } }
You will see that in our foreach loop, we call the GetDirSecurity function for each sub directory. Let’s take a look at what that function does.
private void GetDirSecurity(string srcDir) { try { DirectorySecurity ds = Directory.GetAccessControl(srcDir, AccessControlSections.Access); AuthorizationRuleCollection arc = ds.GetAccessRules(true,true, typeof(NTAccount)); foreach (FileSystemAccessRule fsar in arc) { /* HANDLE OUTPUT HERE fsar.IdentityReference.Value; fsar.FileSystemRights.ToString (); fsar.AccessControlType.ToString (); fsar.IsInherited.ToString(); */ } } catch (Exception e) { //HANDLE EXCEPTION } }
In the GetDirSecurity function, we pass it the directory that we wish to view the security. It creates a directory security object, then creates a collection of rules from that object. We then loop through the collection and view the rules on the directory object. Enjoy!