Pergunta

Estou tendo um problema durante a representar um utilizador. Eu tenho um método declarado como este:

[PrincipalPermission(SecurityAction.Demand, Name=@"DJPITER-PC\Test", Role="LocalTestGroup")]
static void LocalTestGroupOnly()
{
    Console.WriteLine("Inside LocalTestGroupOnly() - {0}", 
        WindowsIdentity.GetCurrent().Name);
}

O código de chamada é:

WindowsImpersonationContext context = 
        WindowsIdentity.Impersonate(token);

    Console.WriteLine("Calling LocalTestGroupOnly() as {0}", 
        WindowsIdentity.GetCurrent().Name);
    LocalTestGroupOnly();

    context.Undo();

    try
    {
        // Reverted user is displayed properly 
        Console.WriteLine("Calling LocalTestGroupOnly() as {0}", 
            WindowsIdentity.GetCurrent().Name);

        // This method should fail but if succeeds
        LocalTestGroupOnly();
    }
    catch (SecurityException ex)
    {
        Console.WriteLine("Your account lacks permission to that function.");
    }

user padrão não é membro da LocalTestGroup. Usuário indicado pelo membro é sinal de LocalTestGroup.

O problema:

A primeira chamada para LocalTestGroupOnly () sucede porque o utilizador indicado pelo membro é um sinal do LocalTestGroup. A segunda chamada (como usuário padrão) para LocalTestGroupOnly () deve falhar porque o usuário padrão não é 'Test' e não pertence a LocalTestGroup. O problema é que este método também tem sucesso.

Se eu executar o programa separadamente - com e sem representação o comportamento nos corrigir:. Tem êxito quando se passar como 'Test' e falha ao chamar como usuário padrão

O que é o problema aqui?

Foi útil?

Solução

Você pode verificar Thread.CurrentPrincipal.Identity vez de WindowsIdentity.GetCurrent()? PrincipalPermission.Demand() utiliza o primeiro.

Para alterar Thread.CurrentPrincipal (ou HttpContext.User), parece que você tem que definir explicitamente depois de representação ou depois de uma desfazer. Verifique aqui para uma pergunta semelhante .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top