强制安全性

强制安全性语法通过创建您要调用的权限对象的新实例来发出安全调用。 可以使用强制性语法执行要求和重写,但不能执行请求。

在进行安全调用前,必须初始化权限对象的状态数据,使之表示您需要的特定形式的权限。 例如,在创建 FileIOPermission 对象时,可以使用构造函数来初始化 FileIOPermission 对象,以使它表示对所有文件的无限制访问,或者表示不允许访问文件。 或者,您可以使用另一个 FileIOPermission 对象传递一些参数,这些参数指示您需要该对象表示的访问类型(即读取、追加或写入)以及需要该对象保护的文件。

除了使用强制安全性语法来调用单个安全对象外,还可使用这种语法来初始化称为权限集的一组权限。 例如,利用此方法是唯一一种可以可靠地在一个方法中对多个权限执行 assert 调用的方式。 使用 PermissionSetNamedPermissionSet 类创建一组权限,然后调用相应的方法来调用所需的安全调用。

可以使用强制性语法执行要求和重写,但不能执行请求。 如果初始化权限状态所需的信息只有在运行时才可以知道,则可对要求和重写使用强制性语法,而不使用声明式语法。 例如,如果要确保调用方拥有读取某个文件的权限,但在运行时之前不知道要读取的文件的名称,此时请使用强制性要求。 当需要在运行时确定某种情况是否持续时,也可选择使用强制性检查而不使用声明式检查,然后根据测试的结果,发出(或不发出)安全要求。

下面的代码段说明请求代码的调用方拥有名为 MyPermission 的自定义权限时所用的强制性语法。 此权限是假设的自定义权限,在 .NET Framework 中并不存在。 在 MyMethod 中创建 MyPermision 的一个新实例,使用安全性调用仅保护此方法。

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 方法