validar usuarios usuario servidor permisos password net leer funcional escritura crear consultar conectar con asp active c# .net active-directory directoryentry

c# - usuarios - permisos de escritura en c windows 7



¿Cómo puedo verificar si un usuario tiene derechos de escritura en Active Directory usando C#? (2)

Como dijo Olive, es difícil hacerlo tú mismo. Es difícil hacerlo bien porque los permisos se pueden pasar a su cuenta de usuario a través de grupos de Active Directory. Entonces, para averiguar el permiso efectivo para una cuenta de usuario en particular, debe averiguar todos los grupos a los que pertenece el usuario.

Afortunadamente, Active Directory tiene un tipo especial de atributos llamados atributos construidos . De forma predeterminada, si está utilizando AD Explorer o ADSI Edit para explorar su objeto, estos tipos de atributos no se muestran. En ADSI Edit, puede configurar el filtro para incluir estos atributos construidos. Uno de los atributos construidos útiles aquí es allowedAttributesEffective . Es un atributo multivalor y contiene todos los atributos que su usuario actual tiene permiso para escribir. Es calculado por Active Directory sobre la marcha. Cuida toda la herencia, niega la anulación y permisos de grupo. Si tiene permiso para escribir en el atributo cn , verá cn como uno de los valores que contiene.

Aquí hay un ejemplo para verificar que un usuario en particular tenga permisos de escritura en un conjunto particular de atributos en un objeto específico en Active Directory.

static bool CheckWritePermission(string path, string username, string password, string[] properties) { using (DirectoryEntry de = new DirectoryEntry(path, username, password)) { de.RefreshCache(new string[] {"allowedAttributesEffective"}); return properties.All( property => de.Properties["allowedAttributesEffective"].Contains(property)); } }

Sí, no es exactamente lo que quieres. Usted está preguntando si un usuario tiene el permiso WriteAllProperties . En realidad, el permiso WriteAllProperties es una colección de permisos de propiedad de escritura en diferentes atributos. Es posible que deba hacer algunos deberes para averiguar qué atributos realmente le interesan a su aplicación. Entonces, solo pasa esos atributos.

Si realmente no tienes idea de qué atributos controlar, este debería ser lo suficientemente bueno

static bool CheckWritePermission(string path, string username, string password) { using (DirectoryEntry de = new DirectoryEntry(path, username, password)) { de.RefreshCache(new string[] { "allowedAttributesEffective" }); return de.Properties["allowedAttributesEffective"].Value != null; } }

Aquí, estoy comprobando si el devuelto allowedAttributesEffective es nulo o no. Si es nulo, significa que no tiene permisos para escribir en ningún atributo. Supongo que su administrador otorgará permiso a todas las propiedades de escritura o denegará todas las propiedades de escritura. Creo que esta es una suposición válida en la mayoría de los casos.

En mi aplicación .NET 2.0 C #, necesito determinar si un usuario (con contraseña) tiene la capacidad de modificar (escribir) la opción en Active Directory. Espero que haya una forma de usar DirectoryEntry sin crear y luego eliminar un nuevo objeto en AD.

Gracias por tu ayuda.


Como puede ver en mi pregunta , parece que no hay posibilidad de simplemente averiguar los derechos de un usuario aleatorio a un objeto específico dentro del AD.

Si alguien sabe de una manera simple , házmelo saber.