Sdílet prostřednictvím


CodeAccessPermission.PermitOnly Metoda

Definice

Zabraňuje volajícím, kteří jsou výše v zásobníku volání, v použití kódu, 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í snímek již existuje aktivní PermitOnly() .

Poznámky

Důležité

Metoda PermitOnly by se měla používat pouze k ochraně prostředků před náhodným přístupem pomocí plně důvěryhodného kódu. Neměl 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 zavolá metodu B, může metoda B jednoznačně přepsat PermitOnly tím, že vystaví Assert. Volaná metoda je v zásobníku vždy vyšší. Proto pokud se metoda B pokusí o přístup k chráněnému prostředku, začne systém zabezpečení kontrolovat oprávnění, protože metoda B je okamžitý volající, a pak provede zásobník, aby ověřil, že v zásobníku není žádná Deny nebo PermitOnly nižší hodnota. Metoda B, která se pokouší o přístup k prostředku, může okamžitě zastavit procházení zásobníku Assert pomocí metody . V takovém případě PermitOnly se nikdy nezjistí objekt umístěný na zásobníku metodou A (metodou volání).

PermitOnly je podobný Deny, protože oba způsobují selhání zásobníku, když by jinak byly ú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í je účinné, PermitOnly dokud se volající kód nevrátí do volajícího. Na snímku může být aktivní jenom jeden PermitOnly . Pokus o volání PermitOnly , pokud v rámci existuje aktivní PermitOnly , bude výsledkem SecurityException. Volání RevertPermitOnly nebo RevertAll odebrání aktivního PermitOnlyobjektu

PermitOnly je ignorováno, pokud není uděleno oprávnění, 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 zavolá Demand toto oprávnění, SecurityException vyvolá se při procházení zásobníku kódu, který se pokusil volat PermitOnly. Je to proto, že volaný PermitOnly kód nemá udělené oprávnění, i když pro toto oprávnění volal PermitOnly . Zásobník volání je obvykle reprezentován jako rostoucí, takže metody vyšší v zásobníku volání volají níže v zásobníku volání.

Poznámky pro dědice

Tuto metodu nelze přepsat.

Platí pro