Принудительная безопасность

Принудительный синтаксис безопасности производит вызов безопасности, создавая новый экземпляр объекта разрешения, который нужно вызвать. Принудительный синтаксис можно использовать для выполнения требований и переопределений, но не запросов.

Прежде чем осуществить вызов безопасности, необходимо инициализировать данные состояния объекта-разрешения, чтобы они предоставляли определенную форму разрешения. Например, создавая объект FileIOPermission, можно использовать конструктор для инициализации объекта FileIOPermission, чтобы он предоставлял неограниченный доступ ко всем файлам или же закрывал доступ к файлам. Можно также использовать другой объект FileIOPermission, передавая параметры, указывающие тип доступа, который должен предоставлять объект (т. е. чтение, добавление или запись), и какие файлы должен защищать объект.

В дополнение к использованию принудительного синтаксиса безопасности для вызова единичного объекта безопасности его можно использовать для инициализации группы разрешений, называемой набором разрешений. Например, этот метод представляет собой единственный путь уверенного выполнения вызовов assert для нескольких разрешений в одном методе. Следует использовать классы PermissionSet и NamedPermissionSet для создания группы разрешений, после чего вызвать соответствующий метод для выполнения желаемого вызова безопасности.

Принудительный синтаксис можно использовать для выполнения требований и переопределений, но не запросов. Можно использовать принудительный синтаксис для требований и переопределений вместо декларативного синтаксиса, когда информация, необходимая для инициализации состояния разрешения, становится известна только во время выполнения. Например, если нужно обеспечить наличие у вызывающих объектов разрешений на чтение определенного файла, но неизвестно имя файла, подлежащего чтению до запуска, используйте принудительное требование. Можно также выбрать использование принудительных проверок вместо декларативных, когда нужно во время выполнения определить, имеет ли место некоторое условие, и на основании результата проверки осуществить (или же не осуществлять) требование безопасности.

Следующий фрагмент кода иллюстрирует использование принудительного синтаксиса для осуществления запроса на наличие у вызывающих объектов кода пользовательского разрешения, называемого MyPermission. Это разрешение — гипотетическое, его не существует в .NET Framework. Новый экземпляр MyPermision создается в методе MyMethod, защищая вызовом безопасности только этот метод.

Public Class MyClass1
   
   Public Sub New()

   End Sub
   
   Public Sub MyMethod()
      'MyPermission is demanded using imperative syntax.
      Dim Perm As New MyPermission()
      Perm.Demand()
      'This method is protected by the security call.
   End Sub
   
   Public Sub YourMethod()
      'YourMethod 'This method is not protected by the security call.
   End Sub
End Class
public class MyClass {
   public MyClass(){
    
   }

   public void MyMethod() {
       //MyPermission is demanded using imperative syntax.
       MyPermission Perm = new MyPermission();
       Perm.Demand();
       //This method is protected by the security call.
   }

   public void YourMethod() {
       //This method is not protected by the security call.
   }
}

См. также

Ссылки

FileIOPermission

Класс SystemSecurityPermissionSet

NamedPermissionSet

Основные понятия

Синтаксис безопасности

Управление доступом для кода

Именованные наборы разрешений

Использование метода Assert