Tengo una aplicación que depende en gran medida de la autorización de los usuarios. Dentro de ella, estoy usando IPrincipal.IsInRole()
para comprobar si los usuarios están en los grupos correctos:IPrincipal.IsInRole() solo funciona cuando trunque los nombres de los roles, ¿por qué?
IPrincipal principal = Thread.CurrentPrincipal;
bool inRole = principal.IsInRole("mydomainname\some role with a long name");
Esto funciona bien para la mayor parte, pero falla (devuelve un resultado incorrecto) si el director es una instancia de una WindowsPrincipal
. He encontrado que para que funcione correctamente, tengo para truncar el nombre de la función que me pase a ser de 32 caracteres (incluyendo el nombre de dominio y el \
):
IPrincipal principal = Thread.CurrentPrincipal; // <- returns a WindowsPrincipal
bool inRole = principal.IsInRole("mydomainname\some role with a lo");
truncar el nombre de la función a continuación, funciona correctamente ¿Por qué? ¿Es esto un problema/función/problema documentado? Tengo una idea de que puede estar relacionado con los dominios de Win2000, pero no puedo encontrar ninguna información sobre él.
Alguna información adicional:
Este es un problema porque la aplicación se puede configurar para utilizar el directorio activo o "a medida" para su autorización ("costumbre" ser cualquier proveedor de autorización que soporta una interfaz - podría ser SQL basado en archivos, etc.). Cuando se configura el modo personalizado, es muy probable que los roles no tengan que truncarse y, por lo tanto, no quiero tener que lidiar con este caso especial en mi código. Además, tengo otra parte de la aplicación que usa clases en el espacio de nombres System.DirectoryServices.AccountManagement
para buscar membresías de grupos. Esto requiere el nombre completo del rol y no funciona si se truncan.
Alguien una vez pensó: "32 caracteres son suficientes para cualquier papel" –
@Henk: Me gusta :) Los personajes son 32 hace que sea bastante difícil de buscar ya que tienes muchos hits para 'Int32',' Win32' , etc ... – adrianbanks