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