IBuySpy用户权限验证

时间:2010-03-06 20:03:18  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:bsp;1、扩展方式      扩展方式基础上有两种:直接利用GenericPrincipal和自己写一个实现IPrincipal的类。IBuySpy用的前者,优点就是N简单。            Context.User = new GenericPrincipal(Context.User.Identity, roles);        &nbs...
  正文:ASP/ target=_blank class=infotextkey>asp.NET在页面的Context.User里面放了一个实现IPrincipal的对象,用来实现对已验证用户的管理。ASP.NET系统中,通常采用的方式就是扩展这个Context.User,让它里面保存定制的信息。
  
  
  
  1、扩展方式
  
  扩展方式基础上有两种:直接利用GenericPrincipal和自己写一个实现IPrincipal的类。IBuySpy用的前者,优点就是N简单。
  
  
  
  Context.User = new GenericPrincipal(Context.User.Identity, roles);
  
  
  
  roles是一个保存了当前用户的角色信息的String,各个角色间用“;”分隔,由前面的代码调用数据层中的UserDB.GetRoles()方法来得到。
  
  
  
  自己写一个实现IPrincipal的类其实也是N简单,你只需要实现两个接口:Identity属性返回一个IIdentity的用户标识对象,IsInRole(String role)判断用户是否具有参数中的角色。下面是我写的一个替代IBuySpy中原有扩展模式的类:
  
  
  
  
  
  public class IBSPrincipal : IPrincipal {
  
  
  
  private IIdentity _identity;
  
  private String[] _asRole;
  
  
  
  下面是两个构造函数:
  
  
  
  public IBSPrincipal(IIdentity identity, String roles) {
  
  _identity = identity;
  
  _asRole = roles.Split(';');
  
  }
  
  
  
  public IBSPrincipal(IIdentity identity, String[] roles) {
  
  _identity = identity;
  
  _asRole = roles;
  
  }
  
  
  
  然后是用来实现IPrincipal的一个属性和一个方法:
  
  
  
  public IIdentity Identity {
  
  get {
  
  return _identity;
  
  }
  
  }
  
  
  
  public bool IsInRole(string role) {
  
   // 下面一行幸得“JGTM'2003”告知Array有一个static的IndexOf()
  
   // 原来是用循环查询_asRole....土不可及...
  
   return (System.Array.IndexOf(_asRole, role) > -1);
  
  }
  
  
  
  OK,然后我们就可以用下面这句替代上面IBuySpy原有的那句了:
  
  
  
  Context.User = new IBSPrincipal(Context.User.Identity, roles);
  
  
  
  看起来好像自己创建这个IBSPrincipal并不划算,它没有提供比GenericPrincipal更多的功能,但好处是我们以后可以随时扩展它,而且实现的成本也很低。
  
  
  
  2、时机
  
  我们在什么时候进行上面所说的这样的扩展行为呢?
  
  
  
  IBuySpy选择在Global.asax里面的Application_AuthenticateRequest事件里面进行这些动作,只要ASP.NET程序需要进行用户验证,那么肯定要经过这里,这个地方不错。
  
  
  
  另一个好地方就是在“页面基类”的Page_Init方法中,我们在构造网站的时候就可以先构建一个“页面基类”(即使一开始里面什么都没有),所有的页面都从这个基类继承下来而不是从默认的System.Web.UI.Page,这样做的好处是我们可以随时把类似的动作放在基类中。可惜IBuySpy本身并没有应用这种“页面基类”的方式。 《IBuySpy用户权限验证》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/13086.html


关键字:

关于《IBuySpy用户权限验证》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td