CodeAccessPermission.PermitOnly Метод

Определение

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

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

Реализации

Исключения

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

Комментарии

Important

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

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

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

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