CodeAccessPermission.PermitOnly Метод

Определение

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

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 ()

Реализации

Атрибуты

Исключения

Уже имеется активное утверждение 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 это разрешение. Стек вызовов обычно представлен как увеличивающийся, поэтому методы выше в методах вызова стека вызовов вызовов ниже в стеке вызовов.

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

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

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