帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP.NET编程
.NET框架中基于角色的安全性(2)
作者: 发布时间:2005-03-12 来源:ASPCOOL
     Principal对象
  
    Principal对象是实现了IPrincipal接口的类的实例,这些对象用来表示用户,并且包括了用户的身份信息。System.Security.Principal命名空间包括了几种类型的Principal类,这些类中封装了程序代码运行的的安全环境(security context)。我们在后面将会看到对用户名和角色进行检查以确定根据用户身份和角色资格是否可以让用户执行某些特定操作的示例代码。
  
    对于每一个线程来说都与一个principal对象相关联。这个principal对象包括了表示运行当前线程的用户的identity对象。我们可以利用Thread类的静态属性CurrentPrincipal来获得这个principal对象。
  
    下面我们来看看IPrincipal接口,该接口只有一个Identity公共属性和IsInRole公共方法:
  
    1、Identity属性指向一个与principal 对象关联的IIdentity对象。
  
    2、IsInRole方法需要一个字符串参数,该字符串是一个角色的名称,并且返回布尔值,指出principal对象是否属于指定的角色。
  
    由于实际开发的需要,我们更多接触到的是WindowsPrincipal类,下面将详细讨论WindowsPrincipal类,相对而言,GenericPrincipal类就要简略一些了。
  
    GenericPrincipal类
  
    GenericPrincipal类用来表示一个通过自定义验证的用户,通常与GenericIdentity类一起使用。下面是一段简单的程序,说明了这两个类如何使用:
  
  
  //创建一个GenericIdentity对象
  IIdentity myGenericIdentity = new GenericIdentity(strUserName, "MyAuthenticationType");
  
  //创建一个GenericPrincipal对象
  String[] roles = null;
  GenericPrincipal myGenericPrincipal = new GenericPrincipal(myGenericIdentity, roles);
  
  //将创建的GenericPrincipal对象附加到当前线程上
  Thread.CurrentPrincipal = myGenericPrincipal;
  
    注意在上面的例子中,我们可以把MyAuthenticationType的验证类型换成熟知的Kerberos身份验证或者NTLM身份验证。
  
    下面是验证的过程:
  
  
  //取得当前线程的principal对象
  IPrincipal principal = Thread.CurrentPrincipal;
  
  if (!principal.Identity.Name.Equals("TrustedUser"))
  {
  throw new SecurityException(
  strUserName + " NOT PERMITTED to proceed.n");
  }
  Console.WriteLine(
  strUserName + " is PERMITTED to proceed.n");
  
    WindowsPrincipal类
  
    WindowsPrincipal类作为我们在开发中最常遇到的实现了IPrincipal接口的类,构造函数相当简单:
  public WindowsPrincipal(WindowsIdentity ntIdentity);
  
    下面的代码说明了如何创建一个WindowsPrincipal对象:
  
  
  WindowsIdentity wi = WindowsIdentity.GetCurrent();
  WindowsPrincipal wp = new WindowsPrincipal(wi);
  
    WindowsPrincipal类中需要注意的是下面这三个重载的IsInRole方法:
  
  
  public virtual bool IsInRole(int);
  
    第1个重载函数接受一个整型参数,该参数表示用户组对应的RID(RID也就是与域相关联的下级凭证(domain-relative subauthority)ID)。RID值定义在Platform SDK的头文件Winnt.h中,Winnt.h中包括一些常见的用户和组,比如DOMAIN_USER_RID_ADMIN、 DOMAIN_USER_RID_GUEST、DOMAIN_GROUP_RID_ADMINS、DOMAIN_GROUP_RID_USERS和DOMAIN_GROUP_RID_GUESTS等等,可以在...Microsoft Visual Studio .NETVc7PlatformSDKInclude文件夹中找到该文件。
  
  
  public virtual bool IsInRole(string);
  
    第2个重载函数接受一个字符串参数,该参数表示一个用户组名称,比如MYCOMPUTERDeveloper(MachineNameGroupName)表示了机器名为MYCOMPUTER的计算机上的Developer用户组。不过对于系统内置的用户组就不能这样表示了,比如Administrators,不能表示为MYCOMPUTERAdministrators,而应该像BUILTINAdministrators这样,不过这样总觉得有点多余,不够自然。于是我们可以使用下面的重载函数。
  public virtual bool IsInRole(WindowsBuiltInRole);
  
    第3个重载函数接受一个WindowsBuiltInRole枚举类型参数,下面就是WindowsBuiltInRole枚举中定义的值:
  
    1、AccountOperator- 管理计算机上或域中的用户帐号。
  
    2、Administrator- 可以任意访问计算机或域
  
    3、BackupOperator- 可以在文件系统上执行备份和恢复操作。
  
    4、Guest- 和User类似,不过有更多的限制。
  
    5、PowerUser- 和Administrator地位相近,不过有一些限制。
  
    6、PrintOperator- 执行打印操作。
  
    7、Replicator- 在域中执行文件复制。
  
    8、SystemOperator- 管理计算机。
  
    9、User- 用户不能执行危害系统或者影响整个系统的操作。

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·如何在命令行下编译一个asp.net项  (2005-03-12)
 ·漫谈.Net PetShop和Duwamish ADO  (2005-03-12)
 ·漫谈.Net PetShop和Duwamish ADO  (2005-03-12)
 ·漫谈.Net PetShop和Duwamish ADO  (2005-03-12)
 ·使用反射将业务对象绑定到 ASP.N  (2005-03-12)
 ·提高ASP.Net应用程序性能的十大方  (2005-03-12)
 ·提高ASP.Net应用程序性能的十大方  (2005-03-12)
 ·ASP.NET中数据库数据导入Excel并  (2005-03-12)
 ·ASP.NET中数据库数据导入Excel并  (2005-03-12)
 ·ATL Server 与 ASP.NET  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统