2012-09-26

Change access right on directory for Users group or current user

If you need set some access right to specific folder I can get idea from this code how to do that.



    public static void AllowModifyOnDirectory(string directoryPath)
    {
      ifstring.IsNullOrWhiteSpacedirectoryPath ) || !Directory.ExistsdirectoryPath )  )
      {
        return;
      }
 
      try
      {
        // Get the access rules of the specified files (user groups and user names that have access to the directory)
        var rules = File.GetAccessControl(directoryPath).GetAccessRules(truetruetypeof (SecurityIdentifier));
 
        // Get the identity of the current user and the groups that the user is in.
        var groups = WindowsIdentity.GetCurrent().Groups;
        string sidCurrentUser = WindowsIdentity.GetCurrent().User.Value;
 
        // Check if modifieng is allowed
        bool allowModify =
          rules.OfType<FileSystemAccessRule>().Any(
            rule =>
            (groups.Contains(rule.IdentityReference|| rule.IdentityReference.Value == sidCurrentUser&&
            rule.AccessControlType == AccessControlType.Allow &&
            (rule.FileSystemRights & FileSystemRights.Modify== FileSystemRights.Modify);
 
 
        if (allowModify)
        {
          return;
        }
 
        
        DirectoryInfo di = new DirectoryInfo(directoryPath);
        DirectorySecurity directorySecurity = di.GetAccessControl();
        bool modified;
        
        try
        {
          // Try to add modify rights to all users in Users 
          FileSystemAccessRule fileSystemAccessRule = new FileSystemAccessRule("Users"FileSystemRights.Modify,
                                                                               AccessControlType.Allow);
          directorySecurity.ModifyAccessRule(AccessControlModification.SetfileSystemAccessRuleout modified);
        }
        catch
        {
          // Try to add modify rights to curent user
          string identity = Environment.UserDomainName + "\\" + Environment.UserName;
          FileSystemAccessRule fileSystemAccessRule = new FileSystemAccessRule(identityFileSystemRights.Modify,
                                                                               AccessControlType.Allow);        
          directorySecurity.ModifyAccessRule(AccessControlModification.SetfileSystemAccessRuleout modified);
        }
      }
      catch
      { }
 
    }