2010-03-24 6 views
3

Я пишу DLL для изменения прав доступа к папке и всему, что находится под папкой. Ниже приведен код, который у меня есть прямо сейчас.Изменение разрешений на дочерние папки в C#

Проблема возникает, когда я вызываю addPermissions(). Он правильно устанавливает права на папку dirName и любую папку, которую я позже создаю под именем dirName, но любая папка, которая существует при добавлении разрешений, не получает дополнительных разрешений.

Нужно ли рекурсивно устанавливать разрешения для всех дочерних папок? Или есть способ сделать это с помощью строки или двух кода?

public class Permissions 
{ 
    public void addPermissions(string dirName, string username) 
    { 
     changePermissions(dirName, username, AccessControlType.Allow); 
    } 

    public void revokePermissions(string dirName, string username) 
    { 
     changePermissions(dirName, username, AccessControlType.Deny); 
    } 

    private void changePermissions(string dirName, string username, AccessControlType newPermission) 
    { 
     DirectoryInfo myDirectoryInfo = new DirectoryInfo(dirName); 

     DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl(); 

     string user = System.Environment.UserDomainName + "\\" + username; 

     myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(
      user, 
      FileSystemRights.Read | FileSystemRights.Write | FileSystemRights.ExecuteFile | FileSystemRights.Delete, 
      InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
      PropagationFlags.InheritOnly, 
      newPermission 
     )); 

     myDirectoryInfo.SetAccessControl(myDirectorySecurity); 
    } 
} 

ответ

1

Вы должны сделать это рекурсивно. Вы можете указать правила наследования для новых папок/файлов, но для существующих вы должны сделать это самостоятельно.

5

Этот вопрос старый, но я искал то же самое и нашли решение:

var dirInfo = new DirectoryInfo(dirName); 
var dirSecurity = dirInfo.GetAccessControl(); 

// Add the DirectorySystemAccessRule to the security settings. 
dirSecurity.AddAccessRule(new FileSystemAccessRule(
    account, 
    rights, 
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
    PropagationFlags.None, 
    AccessControlType.Allow)); 

// Set the new access settings. 
dirInfo.SetAccessControl(dirSecurity); 

привет

+0

-1: Я не вижу, как это решает вопрос. Похоже, этот код делает то же самое, что указано в вопросе, и не обновляет разрешения существующих файлов/каталогов. –

+1

Он делает то, о чем попросил ОП, поскольку я пробовал это, и вы, очевидно, этого не сделали, я смиренно прошу вас его застегнуть. –

+1

Я проверил это, но он не работал для меня. Когда у меня будет время, я вернусь и выясню, в чем разница. –

Смежные вопросы