2009-09-18 19 views

Respuesta

8

Observe las clases en el espacio de nombres System.Security.AccessControl, y especialmente el método DirectorySecurity.RemoveAccessRule.

Además, si se quita todos los permisos, entonces no será capaz de añadir cualquier nuevo más tarde :-)

+0

Encontré esta herramienta útil para verificar que mi código funcionó bien. Muestra los permisos de directorio establecidos dentro de la jerarquía de carpetas. es decir, solo cuando se establecen los permisos, no se heredan: http://www.youtube.com/watch?v=aZLIioUl-5k – pfeds

3

Aquí es un gran conjunto de artículos de CodeProject acerca de la programación de Windows ACL:

The Windows Access Control Model

Part 3 de la serie muestra los métodos específicos de .NET.

2

System.IO.Directory.GetAccessControl() y edite el objeto FileSecurity devuelto.

+0

Directorio. –

+0

casi lo mismo ^^ Lo cambié ahora. – codymanix

20

responsabilidad: Me di cuenta que ya ha sido contestada y aceptado, y realmente quería escribir esto como un comentario a la respuesta aceptada, sin embargo, la imposibilidad de poder formatear los comentarios me ha obligado a publicar esto como una respuesta (que, técnicamente, es) ....

Estaba buscando hacer la lo mismo, y encontró su pregunta. La respuesta de Stu me ayudó a encontrar esta solución. (Tenga en cuenta que solo estoy interesado en eliminar la seguridad explícita).

private static DirectorySecurity RemoveExplicitSecurity(DirectorySecurity directorySecurity) 
{ 
    AuthorizationRuleCollection rules = directorySecurity.GetAccessRules(true, false, typeof(System.Security.Principal.NTAccount)); 
    foreach (FileSystemAccessRule rule in rules) 
     directorySecurity.RemoveAccessRule(rule); 
    return directorySecurity; 
} 

Y esto, obviamente, se utiliza de la siguiente manera: Budy

DirectoryInfo directoryInfo = new DirectoryInfo(path); 
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl(); 
directorySecurity = RemoveExplicitSecurity(directorySecurity); 
Directory.SetAccessControl(path, directorySecurity); 
+0

¡Una respuesta adicional perfectamente válida! –

+0

Buena solución, pero creo que debería llamarla RemoveEXPLICIT no implícita, porque está eliminando las reglas explícitas aquí. – md1337

+0

@ md1337 Gracias, publicación editada para reflejar eso. – Bryan

Cuestiones relacionadas