创建自己的代码访问权限
.NET Framework 提供了一组代码访问权限类,它们旨在帮助保护一组特定的资源和操作,并重点保护由 .NET Framework 公开的那些资源。 在权限主题中对这些权限类作了概括描述,在每个权限类的参考文档中提供对该权限类的详细描述。 对于多数环境,内置的代码访问权限已经够用。 但在某些情况下,定义自己的代码访问权限类可能会有用。 此主题讨论定义自定义代码访问权限类的场合、原因和方式。
如果要定义一个组件或类库,该组件或类库访问内置权限类未涵盖但需要避免未经授权的代码访问的资源,则您应当考虑创建一个自定义代码访问权限类。 如果希望能够对您的自定义权限发出声明式要求,则还必须为该权限定义一个 Attribute 类。 提供这些类并从您的类库内发出对该权限的要求,可以使运行时防止未经授权的代码访问相应的资源,并使管理员能够配置访问权限。
还有其他一些情况适合使用自定义权限。 如果内置代码访问权限类保护一种资源但不能充分控制对该资源的访问,则您可能需要使用自定义代码访问权限。 例如,一种应用程序可能使用人事记录,每个职员的记录存储在一个单独的文件中;在这种情况下,可以独立地对不同类型的职员数据控制读访问和写访问。 可能授权某个内部管理工具读取某个职员的人事文件的某些部分,但不允许该工具修改这些部分。 事实上,甚至可能不允许该工具读取某些部分。
自定义代码访问权限还适用于这种情况:内置权限虽存在,但其定义方式不能使之恰当地保护资源。 例如,可能会有这样一种情况:有一种 UI 功能(如创建菜单的功能)必须进行保护,但内置的 UIPermission 类却不提供保护。 在这种情况下,您可以创建一种自定义权限来保护创建菜单的功能。
只要可能,权限就不应重叠。 拥有多个权限保护一种资源会给管理员带来很大的问题:管理员在每次配置访问该资源的权限时,都必须确保正确地处理所有重叠的权限。
实现自定义代码访问权限包括下列步骤,其中的一些步骤是可选的。 每个步骤在一个单独主题中进行描述。
实现 IPermission 和 IUnrestrictedPermission 接口。
实现 ISerializable 接口(如果性能需要,或者为了支持特殊的数据类型)。
处理 XML 编码和解码。
通过实现 Attribute 类添加声明式安全支持。
在适当的时候为您的权限请求自定义权限。