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