CodeAccessPermission.PermitOnly Метод

Определение

Запрещает вызывающим объектам выше в стеке вызовов использовать код, который вызывает этот метод для доступа ко всем ресурсам, за исключением ресурса, указанного текущим экземпляром.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:
 void PermitOnly();
[System.Diagnostics.Conditional("FEATURE_MONO_CAS")]
public void PermitOnly ();
member this.PermitOnly : unit -> unit
Public Sub PermitOnly ()

Реализации

Атрибуты

Исключения

Уже имеется активное утверждение PermitOnly() для текущего кадра.There is already an active PermitOnly() for the current frame.

Комментарии

Важно!

Метод PermitOnly следует использовать только для защиты ресурсов от случайного доступа с помощью полностью доверенного кода.The PermitOnly method should be used only to protect resources from accidental access by fully trusted code. Его не следует использовать для защиты ресурсов от намеренного использования ненадежным кодом.It should not be used to protect resources from intentional misuse by untrusted code. Например, если метод A выдает PermitOnly для разрешения, а затем вызывает метод B, метод B может овертли переопределить PermitOnly, выполнив 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. Вызываемый метод всегда выше в стеке.The called method is always higher in the stack. Таким образом, если метод B пытается получить доступ к защищенному ресурсу, система безопасности начинает проверять наличие разрешений, так как метод B является непосредственным вызывающим объектом, а затем просматривает стек, чтобы убедиться в отсутствии Deny или PermitOnly ниже. в стеке.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. Метод B, который пытается получить доступ к ресурсу, может немедленно прерывать выполнение прохода стека с помощью метода Assert.Method B, which is trying to access the resource, can stop the stack walk immediately by using the Assert method. В этом случае PermitOnly, помещаемые в стек методом A (вызывающий метод), никогда не обнаруживаются.In that case, the PermitOnly placed on the stack by method A (the calling method) is never discovered.

PermitOnly похожа на Deny, в результате чего в обоих случаях происходит сбой проверки стека, если в противном случае они будут успешными.PermitOnly is similar to Deny, in that both cause stack walks to fail when they would otherwise succeed. Разница заключается в том, что Deny указывает разрешения, которые приведут к сбою при анализе стека, но PermitOnly задает единственные разрешения, которые не приводят к сбою при анализе стека.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.

Вызовите этот метод, чтобы убедиться, что код можно использовать для доступа только к указанным ресурсам.Call this method to ensure that your code can be used to access only the specified resources. Вызов PermitOnly действует до тех пор, пока вызывающий код не вернется в вызывающий объект.The call to PermitOnly is effective until the calling code returns to its caller. Только одна PermitOnly может быть активна в кадре.Only one PermitOnly can be active on a frame. Попытка вызова PermitOnly, когда в кадре существует активная PermitOnly, приводит к SecurityException.An attempt to call PermitOnly when an active PermitOnly exists on the frame results in a SecurityException. Вызовите RevertPermitOnly или RevertAll, чтобы удалить активный PermitOnly.Call RevertPermitOnly or RevertAll to remove an active PermitOnly.

PermitOnly не учитывается для разрешения, которое не предоставлено, так как запрос на это разрешение не будет выполнен.PermitOnly is ignored for a permission not granted because a demand for that permission will not succeed. Однако если код ниже в стеке вызовов позже вызывает Demand для этого разрешения, то при достижении проходом стека кода, который пытался вызвать PermitOnly, выдается SecurityException.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. Это связано с тем, что код, вызвавший PermitOnly, не предоставил разрешение, хотя он называется PermitOnly для этого разрешения.This is because the code that called PermitOnly has not been granted the permission, even though it called PermitOnly for that permission. Стек вызовов обычно представляется как увеличивающийся, поэтому методы, набольшиеся в методах вызова стека вызовов, располагаются ниже в стеке вызовов.The call stack is typically represented as growing down, so that methods higher in the call stack call methods lower in the call stack.

Примечания для тех, кто наследует этот метод

Этот метод нельзя переопределить.You cannot override this method.

Применяется к