ASP.NET 运行时 可扩展 可配置 权限控制 模块

一,要解决的问题
  
  
说实话,我现在很激动。
  
  
BS系统的朋友,可能深有体会,每做一个新系统,我们都得重头写权限控制代码,而且页个面中,都得加那么一段权限控制的代码,一是费神,再者也不是很幽雅,有没有一只通用的魔法棒呢?有,当然有。因为我是一懒人,不太喜欢做重复无聊的工作,就在昨天,一不小心就发明了一只魔法棒
  
  
  
  
二,要预先掌握的知识(要使用魔法棒
  
  
因为我是在ASP.NET运行时,也就是http管线中,过滤控制权限的,所以必须先了解IHttpModule,这东西其实不复杂,用白话讲,她就是http管线中的一插件,或者叫筛子也行。asp.net运行时在处理asp.net资源时,一般都要经过N筛子,最终到达IhttpHandler,所以我们要做的,就是在筛子上做文章。(不是很熟悉asp.net运行时环境的朋友,Google一下,资料很多)
  
  
  
  
三,要澄清的一个概念
  
  
一般来讲,权限控制分两类,或者说两级,第一级范围比较大,也就是控制页面的权限,第二级控制得比较细,可以控制到页面中的某个具体的Button,下面来看看第一种情形。
  
  
  
  
四,魔法棒的特点
  
  1.
可配置性,请看配置文件
  
  
  
  <appSettings>
   <!--
随意配置 系统的启动页 -->
   <add key="LoinPage" value="Default.aspx"/>
  
   <!--
随意配置 需要权限过滤的资源扩展名 -->
   <add key="ExeName" value="aspx"/>
  
   <!--
随意配置 保存在Session中的用户名称 -->
   <add key="UserName" value="UserName"/>
  
   <!--
随意配置 保存在Session中的权限文件列表名称 -->
   <add key="FileList" value="FileList"/>
  
   <!--
随意配置 当权限不够时,要跳转的页面 -->
   <add key="NoAuthoredPage" value="NoAuthoredPage.htm"/>
  
   <!--
随意配置 查询权限的SQL语句 -->
   <add key="SqlStatement" value="select ID,fileName from AuthorFile where userName='{0}'"/>
  
   <!--
随意配置 数据库连接字符串 -->
   <add key="sqlConnectionString" value="Data Source=localhost;Initial Catalog=Test;User ID=sa;Password=13755002212"/>
  
   </appSettings>
  
  
  
可以看到,我们可以配置很多,就连SQL语句都可以,还可以配置哪些需要进行权限控制的资源等等,忘记加密数据库连接字符串了,请大家不要黑我。
  
  2.
超级低偶合,使用此魔法棒,只需要配置一行
  
  
  
  <httpModules>
  
   <add name="HttpModuleName" type="HttpModule
授权.AuthorHttpModule"/>
   </httpModules>
  
  
  
太酷了,记得一定要加上,不然筛子就成了竹蓝子
  
  
  
  3.
高性能,权限从数据库中获取,并且只有在帐号通过验证,并且是第一次的时候,才查询数据库的权限表,以后直接从内存中取权限列表,避免无谓的开销。
  
  
  
  //
只有在第一次验证通过,查询数据库,避免不必要的查询开销
   if (application.Session["FileList"] == null)
   {
   dtFile = new Validator().GetCurrUserAuthorFile(userName).Tables[0];
   if (dtFile != null)
   {
  
  
  4.
权限与系统业务逻辑完全分开
  
  5.
高度可定制,可扩展,不说了,大家还是看一下效果
  
  
登陆效果
  
  
  
  
主界面
  
  
  
  
权限判断
  
  
  
  
  
  
  
五,迫不及待要做的事情(哈哈)
  
  
代码和数据库文件下载
  http://files.cnblogs.com/wmj/null_authorDemo.rar
  
  
  
六,结束雨
  
  
魔法棒,其实可以更加完善,后面我会继续改进,希望对大家有帮助和启发,谢谢。
  
  
  
  
七,补充
  
  
刚刚有朋友老说,这不是控件级别的权限控制,对,这是页面级别的权限控制,页面级别和控件级别的控制不能混为一谈,后续,我会单独做一个控件级别的控制模块,再者,我会完善不同目录下同文件名的bug

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值