La solicitud de permiso principal falló al trabajar con varios ensamblados

Tengo una aplicación simple dividida en tres ensamblajes. Uno es un formulario de cliente que permite al usuario leer una clave del registro. El segundo es un formulario de autorización a través del cual el usuario inicia sesión. El tercero es una biblioteca .dll con todos los métodos que hacen el trabajo real.

Seguí el tutorial de MSDN sobre cómo realizar comprobaciones de seguridad declarativas que se encuentran aquí http://msdn.microsoft.com/en-us/library/dswfd229.aspx pero algo todavía no funciona.

Creo un objeto GenericPrincipal como este:

    public static void CreatePrincipal(string user)
    {
        GenericIdentity MyIdentity = new GenericIdentity(user);

        String[] MyString = { "Administrator", "User" };

        GenericPrincipal MyPrincipal =
            new GenericPrincipal(MyIdentity, MyString);

        Thread.CurrentPrincipal = MyPrincipal;
    }

Se encuentra en la clase CustomPrincipal en el ensamblado .dll.

En el mismo ensamblado tengo una clase RegistryOperations con el siguiente método:

    [PrincipalPermissionAttribute(SecurityAction.Demand, Name = "admin1", Role = "User")]
    public static string ReadDeclarative()
    {
      ...
    }

Nada sofisticado. En mi ensamblado de "Autorización" tengo la GUI que requiere el método .dll para la autorización:

    private void btnLogin_Click(object sender, EventArgs e)
    {
        CustomPrincipal.CreatePrincipal(txtUsername.Text);
    }

Finalmente, en el tercer ensamblado, "Cliente", solicito el método .dll para leer las claves de registro:

    private void btnReadRegistry_Click(object sender, EventArgs e)
    {
        txtContents.Text = RegistryOperations.ReadDeclarative();
    }

Esto no funciona. Me conecto a través de la Asamblea de autorización y cuando intento leer el registro Recibo la Solicitud de permiso principal fallida. Visual Studio sugiere agregar los ensamblajes a una lista mística de plena confianza, pero eso no se encuentra en ninguna parte en VS2010. Por favor avise.

preguntado el 10 de mayo de 11 a las 12:05

1 Respuestas

Cuando inicias sesión, ¿estás usando el nombre de usuario? admin1? (Si no tenía la intención de buscar un nombre de usuario coincidente en la verificación de permisos, debe eliminarlo de la demanda).

contestado el 10 de mayo de 11 a las 17:05

Intenté buscar un nombre de usuario coincidente para fines de prueba. Estoy iniciando sesión con el nombre de usuario 'admin1', así que no es así :( - barjed

En ese caso, no puedo reprogramar. ¿Ha intentado agregar código al método btnReadRegistry_Click para verificar el contenido de Thread.CurrentPrincipal en el momento en que se ejecuta? - Nicole Calinoiu

Sí, lo he comprobado con un depurador. Los contenidos están ahí. - barjed

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.