CodeAccessPermission.PermitOnly Metoda

Definice

Zabrání volajícím v zásobníku volání používat kód, který volá tuto metodu pro přístup ke všem prostředkům s výjimkou prostředku určeného aktuální instancí.

public:
 virtual void PermitOnly();
public void PermitOnly();
abstract member PermitOnly : unit -> unit
override this.PermitOnly : unit -> unit
Public Sub PermitOnly ()

Implementuje

Výjimky

Pro aktuální rámec je již aktivní PermitOnly() .

Poznámky

Important

Metoda PermitOnly by měla být použita pouze k ochraně prostředků před náhodným přístupem plně důvěryhodným kódem. Nemělo by se používat k ochraně prostředků před úmyslným zneužitím nedůvěryhodným kódem. Pokud například metoda A vydá PermitOnly oprávnění a pak volá metodu B, metoda B může příliš přepsat PermitOnly tím, že vydá .Assert Volána metoda je vždy vyšší v zásobníku. Proto pokud se metoda B pokusí získat přístup k chráněnému prostředku, systém zabezpečení začne kontrolovat oprávnění s ním, protože metoda B je okamžitý volající, a pak přejde dolů zásobník, aby potvrdil, že v zásobníku není Deny nebo PermitOnly není. Metoda B, která se snaží získat přístup k prostředku, může zastavit zásobník chůze okamžitě pomocí Assert metody. V takovém případě se nikdy nezjistí umístěná PermitOnly do zásobníku metodou A (volající metoda).

PermitOnly je podobný jako Denyv tom, že obě způsobují selhání zásobníku, když by jinak úspěšné. Rozdíl je v tom, že Deny určuje oprávnění, která způsobí selhání procházení zásobníku, ale PermitOnly určuje jediná oprávnění, která nezpůsobí selhání procházení zásobníku.

Voláním této metody zajistíte, že váš kód lze použít pro přístup pouze k zadaným prostředkům. Volání PermitOnly je účinné, dokud se volající kód nevrátí do volajícího. V rámci rámce může být aktivní pouze jeden PermitOnly . Výsledkem pokusu o volání PermitOnly , pokud aktivní PermitOnly existuje v rámci, má za SecurityExceptionnásledek . Zavolat RevertPermitOnly nebo RevertAll odebrat aktivní PermitOnly.

PermitOnly je ignorován pro oprávnění, které není uděleno, protože požadavek na toto oprávnění nebude úspěšný. Pokud však kód nižší v zásobníku volání později volá Demand toto oprávnění, SecurityException vyvolá se při procházení zásobníku do kódu, který se pokusil volat PermitOnly. Důvodem je to, že kód, který volal PermitOnly , nebyl udělen oprávnění, i když volal PermitOnly pro toto oprávnění. Zásobník volání je obvykle reprezentován jako rostoucí dolů, takže metody vyšší ve volání zásobníku volání nižší v zásobníku volání.

Poznámky pro dědice

Tuto metodu nelze přepsat.

Platí pro