CodeAccessPermission.PermitOnly Metoda

Definicja

Zapobiega wywoływaniu obiektów wywołujących w stosie wywołań przy użyciu kodu wywołującego tę metodę w celu uzyskania dostępu do wszystkich zasobów z wyjątkiem zasobu określonego przez bieżące wystąpienie.Prevents callers higher in the call stack from using the code that calls this method to access all resources except for the resource specified by the current instance.

public:
 virtual void PermitOnly();
public:
 void PermitOnly();
public void PermitOnly ();
[System.Diagnostics.Conditional("FEATURE_MONO_CAS")]
public void PermitOnly ();
abstract member PermitOnly : unit -> unit
override this.PermitOnly : unit -> unit
[<System.Diagnostics.Conditional("FEATURE_MONO_CAS")>]
member this.PermitOnly : unit -> unit
Public Sub PermitOnly ()

Implementuje

Atrybuty

Wyjątki

Istnieje już aktywny PermitOnly() dla bieżącej ramki.There is already an active PermitOnly() for the current frame.

Uwagi

Ważne

PermitOnlyMetoda powinna być używana tylko w celu ochrony zasobów przed przypadkowym dostępem przez w pełni zaufany kod.The PermitOnly method should be used only to protect resources from accidental access by fully trusted code. Nie należy używać go do ochrony zasobów przed zamierzonym nieprawidłowym użyciem przez kod niezaufany.It should not be used to protect resources from intentional misuse by untrusted code. Na przykład, jeśli metoda A wystawia PermitOnly dla uprawnienia, a następnie wywołuje metodę B , Metoda B może overtly zastąpić elementu PermitOnly przez wygenerowanie Assert .For example, if method A issues a PermitOnly for a permission and then calls method B, method B can overtly override the PermitOnly by issuing an Assert. Wywołana metoda jest zawsze wyższa w stosie.The called method is always higher in the stack. W związku z tym, jeśli metoda B próbuje uzyskać dostęp do chronionego zasobu, system zabezpieczeń rozpocznie sprawdzanie pod kątem uprawnień, ponieważ metoda B jest bezpośrednim obiektem wywołującym, a następnie analizuje stos, aby potwierdzić, że na stosie nie ma lub nie jest Deny PermitOnly niższy.Therefore, if method B tries to access a protected resource, the security system begins checking for permissions with it because method B is the immediate caller, and then walks down the stack to confirm that there is no Deny or PermitOnly lower in the stack. Metoda B , która próbuje uzyskać dostęp do zasobu, może przestać przechodzenie stosu natychmiast przy użyciu Assert metody.Method B, which is trying to access the resource, can stop the stack walk immediately by using the Assert method. W takim przypadku PermitOnly umieszczenie w stos według metody A (Metoda wywołująca) nigdy nie jest odnajdywane.In that case, the PermitOnly placed on the stack by method A (the calling method) is never discovered.

PermitOnly działa podobnie jak Deny w przypadku, gdy obie przyczyny kończą się niepowodzeniem.PermitOnly is similar to Deny, in that both cause stack walks to fail when they would otherwise succeed. Różnica polega na tym, że Deny określa uprawnienia, które spowodują niepowodzenie przechodzenia stosu, ale PermitOnly określa jedyne uprawnienia, które nie powodują błędów przeszukiwania stosu.The difference is that Deny specifies permissions that will cause the stack walk to fail, but PermitOnly specifies the only permissions that do not cause the stack walk to fail.

Wywołaj tę metodę, aby upewnić się, że kod może być używany w celu uzyskania dostępu tylko do określonych zasobów.Call this method to ensure that your code can be used to access only the specified resources. Wywołanie PermitOnly jest skuteczne do momentu powracania kodu wywołującego do obiektu wywołującego.The call to PermitOnly is effective until the calling code returns to its caller. Tylko jeden PermitOnly może być aktywny w ramce.Only one PermitOnly can be active on a frame. Próba wywołania, PermitOnly gdy element aktywny PermitOnly istnieje w ramce, spowoduje wystąpienie elementu SecurityException .An attempt to call PermitOnly when an active PermitOnly exists on the frame results in a SecurityException. Wywołaj RevertPermitOnly lub, RevertAll Aby usunąć aktywny PermitOnly .Call RevertPermitOnly or RevertAll to remove an active PermitOnly.

PermitOnly jest ignorowany dla uprawnień, które nie zostały przyznane, ponieważ żądanie tego uprawnienia nie powiedzie się.PermitOnly is ignored for a permission not granted because a demand for that permission will not succeed. Jeśli jednak kod niższy na stosie wywołań później wywołuje Demand dla tego uprawnienia, jest generowany, gdy przeszukiwany SecurityException stos osiągnie kod, który próbował wywołać PermitOnly .However, if code lower on the call stack later calls Demand for that permission, a SecurityException is thrown when the stack walk reaches the code that tried to call PermitOnly. Wynika to z faktu, że wywoływany kod PermitOnly nie otrzymał uprawnienia, nawet jeśli został wywołany PermitOnly dla tego uprawnienia.This is because the code that called PermitOnly has not been granted the permission, even though it called PermitOnly for that permission. Stos wywołań jest zazwyczaj reprezentowany jako rosnący, więc metody wyższe w metodach wywołania stosu wywołań są niższe w stosie wywołań.The call stack is typically represented as growing down, so that methods higher in the call stack call methods lower in the call stack.

Uwagi dotyczące dziedziczenia

Nie można zastąpić tej metody.You cannot override this method.

Dotyczy