Substituindo verificações de segurança
Normalmente, a verificação de segurança examina os chamadores da pilha de chamadas para garantir que cada um deles tenha recebido a permissão especificada. No entanto, você pode substituir o resultado das verificações de segurança chamando Assert ou PermitOnly em um objeto de permissão individual ou um objeto do conjunto de permissões. Dependendo de quais desses métodos você chama, é possível fazer com que o controle de segurança tenha êxito ou falha, mesmo que as permissões de todos os chamadores na pilha não podem ter sido verificadas.
Importante
Em .NET Framework 4, o suporte do tempo de execução foi removido pela aplicação das solicitações de permissão de Deny e de RevertDeny.Essas solicitações não devem ser usadas no código que é baseado em .NET Framework 4 ou posterior.Para obter mais informações sobre isso e outras alterações, consulte Alterações na segurança do .NET Framework.
Cada vez que um método chama outro método, um novo quadro é gerado na pilha de chamadas para armazenar informações sobre o método que está sendo chamado. (Usar construtores e acessar propriedades são considerados chamadas de método nesse contexto.) Cada quadro de pilha inclui informações sobre todas as chamadas que o método faz para Assert ou PermitOnly. Se um chamador usa mais de um Assert ou PermitOnly na mesma chamada de método, o tempo de execução aplica as seguintes regras de processamento, que podem afetar o comportamento de substituição:
Se, durante o exame da pilha, o tempo de execução descobre mais do que uma substituição do mesmo tipo (ou seja, duas chamadas para Assert) em um quadro de pilha, a segunda substituição faz com que uma exceção seja lançada.
Quando as substituições diferentes estão presentes no mesmo quadro de pilha, o tempo de execução processa essas alternativas na seguinte ordem: PermitOnly e em seguida Assert.
Para trocar uma substituição, primeiro chame o método de reverter apropriado (por exemplo, RevertAssert) e depois aplique a nova substituição.
Dica
As substituições de pilha de exame nunca devem ser feitas em um construtor de classe porque o código do construtor de classe não é garantido para executar em qualquer ponto específico ou em qualquer contexto específico.Como o estado da pilha de chamadas em um construtor de classe não é bem definido, as substituições de exame de pilha colocadas nos construtores podem produzir resultados inesperados e indesejados.
Desenvolvedores de aplicativos geralmente não precisam usar Assert ou PermitOnly e os desenvolvedores de bibliotecas de classe e componente precisam raramente usá-los. No entanto, as substituições de segurança são apropriadas em algumas situações, que são descritas nos tópicos Assert e PermitOnly .
Dica
Se você executar uma substituição (Assert ou PermitOnly), você deve reverter a permissão antes de poder executar o mesmo tipo de substituição no mesmo quadro de pilha (isto é, o método).Caso contrário, um SecurityException é lançado.
Use um dos métodos estáticos listados na tabela a seguir para reverter uma substituição.
Método |
Ação de método |
---|---|
Faz com que todas as substituições anteriores do quadro atual sejam removidas e não tenham mais efeitos. |
|
Faz com que qualquer Assert anterior do quadro atual seja removido e não tenha mais efeito. |
|
Faz com que qualquer PermitOnly anterior do quadro atual seja removido e não tenha mais efeito. |
Consulte também
Referência
Conceitos
Gravando bibliotecas de classe seguras