快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

.NET框架中基于角色的安全性(3)

Permissions对象
  
    作为.NET安全性两个重要的分支,基于角色的安全性和代码访问安全都离不开一个重要的概念--权限(permissions)。在基于角色的安全性中,PrincipalPermission类用来检查调用线程的用户身份;而在代码访问安全中,从CodeAccessPermission派生的类则用来检查执行当前方式的所有线程各自的权限。
  
    权限对象通过已有的安全策略来说明操作是否被答应或拒绝。对于代码访问安全权限(不过这不适用于用户权限),.NET CLR提供了堆栈遍历机制来确定所有的调用堆栈帧是否具有应有的权限。需要注重的一点是,假如permission对象为null,那么我们可以将它和PermissionState.None视为等同的,说明没有提供任何权限。权限常用于下面这些场合:
  
    1、定义执行代码所需要的权限。
  
    2、系统的安全策略可以承认或拒绝代码哀求的权限。
  
    3、代码通过Demand方式来保证(要求)它调用的代码具有所需的权限。
  
    4、代码还可以使用Assert,Deny或PermitOnly方式来跳过安全堆栈检查机制。
  
    另外,我们还可以使用成组的权限,在PermissionSet类中我们就可以使用各种不同权限组集合。
  
    下面我们还是先来看看最常用到的PrincipalPermission类,至于另外一个常用的CodeAccessPermission类,稍后将会在代码访问安全的内容中具体介绍。
  
    作为PrincipalPermission类实现的三个接口之一,IPermission接口在PrincipalPermission类中有了举足轻重的作用。IPermission接口提供了以下方式:
  
    1、Copy 创建并返回当前权限的一样副本。
  
    2、Demand 假如调用堆栈上的内容不满意权限对象所指定的权限内容,则会在运行时引发SecurityException。该方式可以让当前代码不会被其他的恶意代码所利用。
  
    3、Intersect 创建并返回一个权限,该权限是当前权限和指定权限的交集。
  
    4、IsSubsetOf 确定当前权限是否为指定权限的子集。
  
    5、Union 创建一个权限,该权限是当前权限与指定权限的并集。
  
    在上面列出的方式中,Demand方式是最常用也是最重要的方式。Demand方式会对当前方式的所有调用者进行检查以确定它们是否有足够的权限访问以指定的方法访问特定的资源(通常的检查方法是从调用堆栈上最新的调用方式开始通过执行完全的堆栈遍历来满意安全条件,但堆栈遍历不是必须的,PrincipalPermission.Demand就没有进行堆栈遍历),假如检查失败的话,Demand方式会抛出SecurityException非常,只有没有任何非常抛出的情况下,Demand方式才成功返回。
  
    下图显示的是IPermission接口的继续层次:
  
  [imghttp://myarticle.enet.com.cn/images/200407/1090981312024.gif[/img]
  
    接着我们来讨论PrincipalPermission类,这里就需要我们前面所谈到principal对象了,在PrincipalPermission类的实例执行Demand方式时,实际上是在判定当前的principal对象是否匹配给定PrincipalPermission对象,假如不匹配的话,就抛出SecurityException。另外,Demand方式还可以用来强行让principal对象的identity验证通过,以便能不抛出非常,进行正常的操作。
  
    下面的代码片断简要地说明了如何使用principalpermission对象:
  
  
  String user1 = \"Abbott\";
  String role1 = \"StraightMan\";
  PrincipalPermission PrincipalPerm1 =
  new PrincipalPermission(user1, role1);
  String user2 = \"Costello\";
  String role2 = \"FunnyMan\";
  PrincipalPermission pp =
  new PrincipalPermission(user2, role2);
  PrincipalPerm1.Union(pp).Demand();
  
    上面的代码说明了如何使用合并两个principalpermission对象,在合并之后,假如用户是StraightMan角色的Abbott或是FunnyMan角色的Costello,那么Demand将会成功返回。
  
    以上就是基于角色的安全性中所需要用到的基础类和一些示例代码,希望大家能够从上面的内容中粗窥.NET安全性的门堂,能更好的应用.NET安全性来开发安全的程序。



返回类别: 教程
上一教程: 学习笔记《.NET框架程序设计(修订版)》--第三章 共享程序集 (3)
下一教程: Microsoft .NET Development Platform的Linux版本(Mono)出现

您可以阅读与".NET框架中基于角色的安全性(3)"相关的教程:
· .NET框架中基于角色的安全性(3)
· .NET框架中基于角色的安全性(2)
· .NET框架中基于角色的安全性(2)
· 针对 .NET 框架的安全编码指南
· 微软的远程处理框架.NET Remoting(转天极网)之一
    微笑服务 优质保证 索取样品