Udostępnij za pośrednictwem


CodeAccessPermission.PermitOnly Metoda

Definicja

Zapobiega wywoływaniom wyższym w stosie wywołań przy użyciu kodu, który wywołuje tę metodę, aby uzyskać dostęp do wszystkich zasobów z wyjątkiem zasobu określonego przez bieżące wystąpienie.

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

Implementuje

Wyjątki

Dla bieżącej ramki jest już aktywny PermitOnly() .

Uwagi

Ważne

Metoda PermitOnly powinna służyć tylko do ochrony zasobów przed przypadkowym dostępem przez w pełni zaufany kod. Nie należy jej używać do ochrony zasobów przed zamierzonym nieprawidłowym użyciem przez niezaufany kod. Jeśli na przykład metoda A wystawia uprawnienie, PermitOnly a następnie wywołuje metodę B, metoda B może zastąpić PermitOnly metodę, wydając polecenie Assert. Wywołana metoda jest zawsze wyższa w stosie. W związku z tym, jeśli metoda B próbuje uzyskać dostęp do chronionego zasobu, system zabezpieczeń rozpoczyna sprawdzanie uprawnień za jego pomocą, ponieważ metoda B jest bezpośrednim obiektem wywołującym, a następnie przechodzi w dół stosu, aby potwierdzić, że nie Deny ma lub PermitOnly niższego poziomu w stosie. Metoda B, która próbuje uzyskać dostęp do zasobu, może natychmiast zatrzymać spacer stosu Assert przy użyciu metody . W takim przypadku nigdy PermitOnly nie odnaleziono elementu umieszczonego na stosie według metody A (metody wywołującej).

PermitOnly jest podobny do Deny, w tym obu przyczynach stos przechodzi niepowodzenie, gdy w przeciwnym razie powiedzie się. Różnica polega na tym, że Deny określa uprawnienia, które spowodują niepowodzenie stosu, ale PermitOnly określa jedyne uprawnienia, które nie powodują niepowodzenia stosu.

Wywołaj tę metodę, aby upewnić się, że kod może służyć do uzyskiwania dostępu tylko do określonych zasobów. Wywołanie metody jest PermitOnly skuteczne, dopóki kod wywołujący nie powróci do obiektu wywołującego. Tylko jeden PermitOnly może być aktywny na ramce. Próba wywołania PermitOnly , gdy aktywna PermitOnly istnieje na ramce, powoduje wyświetlenie elementu SecurityException. Wywołaj lub RevertPermitOnlyRevertAll usuń aktywny PermitOnlyelement .

PermitOnly jest ignorowana dla nieudzielonego uprawnienia, ponieważ żądanie dla tego uprawnienia nie powiedzie się. Jeśli jednak kod niższy w stosie wywołań później wywołuje Demand to uprawnienie, zostanie zgłoszony, SecurityException gdy przewodnik stosu osiągnie kod, który próbował wywołać PermitOnlymetodę . Jest to spowodowane tym, że kod, którego wywołano PermitOnly , nie otrzymał uprawnień, mimo że został wywołany PermitOnly do tego uprawnienia. Stos wywołań jest zwykle reprezentowany jako rosnący, dzięki czemu metody wyższe w metodach wywołań stosu wywołań niższe w stosie wywołań.

Uwagi dotyczące dziedziczenia

Nie można zastąpić tej metody.

Dotyczy