Tuesday 21 May 2013

Detect access rights to directory

 
Just have been playing on my lunch and wondered how can 
I detect from my C# code whether I have access right for reading/writing to
specific folder.
 
 
I come up after bit of trial and error to code as follows:
 

 

 


string path = @"c:\temp";
string NtAccountName = @"group\userName";

var di = new DirectoryInfo(path);
var acl = di.GetAccessControl(AccessControlSections.Access);
var rules = acl.GetAccessRules(true, true, typeof(NTAccount));

//Go through the rules returned from the DirectorySecurity
foreach (AuthorizationRule rule in rules)
{
    //If we find one that matches the identity we are looking for
    if (rule.IdentityReference.Value.Equals(NtAccountName, StringComparison.CurrentCultureIgnoreCase))
    {
        //Cast to a FileSystemAccessRule to check for access rights
        if ((((FileSystemAccessRule)rule).FileSystemRights & FileSystemRights.WriteData) > 0)
        {
            Console.WriteLine(string.Format("{0} has write access to {1}", NtAccountName, path));
        }
        else
        {
            Console.WriteLine(string.Format("{0} does not have write access to {1}", NtAccountName, path));
        }

        if ((((FileSystemAccessRule)rule).FileSystemRights & FileSystemRights.Read) > 0)
        {
            Console.WriteLine(string.Format("{0} does not have read access to {1}", NtAccountName, path));
        }
        else
        {
            Console.WriteLine(string.Format("{0} does not have read access to {1}", NtAccountName, path));
        }
    }
}

original code that i used is of course from StackOverflow

 
 
 
 

No comments:

Post a Comment