2009-11-03 13 views
2

J'ai le code suivant, qui devrait supprimer l'accès des utilisateurs d'un certain dossier. Malheureusement, ce n'est pas le cas (la règle d'accès reste en place). Aucune exception n'est levée.Sécurité du fichier Windows, suppression d'une règle d'accès

AuthorizationRuleCollection arc = ds.GetAccessRules(true, true, typeof(NTAccount)); 

foreach (FileSystemAccessRule ar in arc) 
{ 
    if (ar.IdentityReference is NTAccount) 
    { 
     NTAccount account = ar.IdentityReference as NTAccount; 

     if (!AdminUsers.Contains(account.Value) && 
      ownerAccount != account.Value) 
     { 
      ds.RemoveAccessRule(ar); 
      WriteLog("Removed rule for: " + account); 
     } 

    } 
} 

outputDirectory.SetAccessControl(ds); 

Je peux voir à partir de mes journaux que le RemoveAccessRule a été appelé. Pourquoi la règle n'est-elle pas partie?

Modifier: La règle est une règle héritée. Dois-je faire quelque chose de différent pour supprimer les règles héritées?

+1

Y a-t-il un dossier parent qui applique la règle que vous essayez de supprimer? –

+0

Il est hérité si c'est ce que vous voulez dire ... –

Répondre

4

Jetez un oeil à SetAccessRuleProtection sur DirectorySecurity classe, à la lecture it..I dirait que vous auriez besoin ..

ds.RemoveAccessRule(ar); 
ds.SetAccessRuleProtection(true,false); 

jouer avec elle.

+0

Je crois que c'était exactement. C'est merveilleux, merci beaucoup. –