CodeAccessPermission.PermitOnly Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.