CodeAccessPermission.PermitOnly Метод

Определение

Запрещает вызывающим объектам выше в стеке вызовов использовать код, который вызывает этот метод для доступа ко всем ресурсам, за исключением ресурса, указанного текущим экземпляром.

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

Реализации

Исключения

Уже имеется активное утверждение PermitOnly() для текущего кадра.

Комментарии

Важно!

Метод PermitOnly следует использовать только для защиты ресурсов от случайного доступа с помощью полностью доверенного кода. Его не следует использовать для защиты ресурсов от преднамеренного неправильного использования ненадежным кодом. Например, если метод A выдает PermitOnly для разрешения , а затем вызывает метод B, метод B может переопределить PermitOnly , выдавая .Assert Вызываемый метод всегда находится выше в стеке. Таким образом, если метод B пытается получить доступ к защищенному ресурсу, система безопасности начинает проверку разрешений с его помощью, так как метод B является непосредственным вызывающим, а затем проходит по стеку, чтобы убедиться, что в стеке нет Deny или PermitOnly ниже. Метод B, который пытается получить доступ к ресурсу, может немедленно остановить обход стека с помощью Assert метода . В этом случае объект , помещенный PermitOnly в стек по методу A (вызывающий метод), никогда не обнаруживается.

PermitOnly аналогичен параметру Deny, в том, что и то, и другое приводит к сбою обходов стека, когда они в противном случае были бы успешными. Разница заключается в том, что Deny указывает разрешения, которые приведут к сбою стека, но PermitOnly только разрешения, которые не приводят к сбою стека.

Вызовите этот метод, чтобы убедиться, что код может использоваться для доступа только к указанным ресурсам. Вызов действует до PermitOnly тех пор, пока вызывающий код не вернется в вызывающий объект. Только один может PermitOnly быть активным в кадре. При попытке вызвать PermitOnly , если в кадре существует активный PermitOnly объект , возникает SecurityExceptionисключение . Вызовите RevertPermitOnly или RevertAll , чтобы удалить активный PermitOnlyобъект .

PermitOnly игнорируется для разрешения, которое не предоставлено, так как запрос на это разрешение не будет выполнен. Однако если код ниже в стеке вызовов позже вызывает Demand это разрешение, возникает исключение , SecurityException когда пошаговое руководство по стеку достигает кода, который пытался вызвать PermitOnly. Это связано с тем, что коду, который вызвал PermitOnly , не было предоставлено разрешение, даже если он вызывал PermitOnly это разрешение. Стек вызовов обычно представлен как растущий вниз, поэтому методы выше в стеке вызовов вызывают методы ниже в стеке вызовов.

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

Этот метод нельзя переопределить.

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