2010-03-24 5 views
3

J'écris une DLL pour modifier les autorisations sur un dossier et tout ce qui se trouve sous le dossier. Voici le code que j'ai en ce moment.Modification des autorisations sur les dossiers enfants en C#

Le problème vient quand j'appelle addPermissions(). Il définit correctement les autorisations sur le dossier dirName et tous les dossiers que je crée ultérieurement sous dirName, mais tout dossier existant lorsque j'ajoute des autorisations n'obtient pas les autorisations supplémentaires. Dois-je définir de façon récursive les autorisations sur tous les dossiers enfants?

Ou y a-t-il un moyen de le faire avec une ligne ou deux de code?

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); 
    } 
} 

Répondre

1

Vous devez le faire récursivement. Vous pouvez spécifier des règles d'héritage pour de nouveaux dossiers/fichiers, mais pour exister, vous devez le faire vous-même.

5

Cette question est vieux, mais je cherchais la même chose et a trouvé une solution:

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); 

salutations

+0

-1: Je ne vois pas comment cela répond à la question. Il semble que ce code fasse la même chose que ce qui est indiqué dans la question, et ne met pas à jour les permissions des fichiers/répertoires existants. –

+1

Il fait ce que l'OP a demandé, puisque je l'ai essayé et vous n'avez évidemment pas, je vais humblement vous demander de le compresser. –

+1

J'ai testé cela, mais ça ne fonctionnait pas pour moi. Quand j'aurai du temps, je reviendrai et je découvrirai quelle était la différence. –

Questions connexes