views:

105

answers:

2

I would like to apply a folder's Security Settings to all descendants in C#. Essentially, I would like to do the same thing as 'Replace all existing inheritable permissions on all descendants with inheritable permissions from this object' within 'Advanced Security Settings for [Folder]'.

Are there any elegant ways to approach this?

+2  A: 

You may find the DirectorySecurity class to be useful for this.

http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx

There may be some other valuable tools within the System.Security.AccessControl namespace

hamlin11
Thank you hamlin11. I have been trying to put together a solution with this. It's feeling a bit 'hacky' at the moment, though. I will post what I come up with
ccook
+2  A: 

After some quality time with google and MSDN I came up with the following bit of code. Seems to work just fine.

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));
}
ccook
Looking good ccook. Sorry for my short comment above, i was short on time.
hamlin11
Thank you, and no problem at all. You kept me on the right path
ccook