httpmodule权限应用

权限无论如何设计,缩小到原子级别,大致是这样的:

key-value,权限编码--对应权限。

实现方式多种多样。但在应用上,却是一致的。即从权限集(通常缓存)中,根据权限的key,判断是否有权限。

有到页面上,也有到页面的具体功能上。

说一下道页面级别的权限应用。

我们的项目是这样设计的。

表1(页面权限编码):

functionId,url

100001,Default.aspx

表2(用户权限)

functionid,userid

100001,1

分配权限时,记录functionid.这样就知道拥有的具体权限。

阶段一、

在每一个页面上,假如权限判断方法。没有权限时,进行相应的处理。当然没有权限的页面不会在菜单中显示的。

毫无疑问,工作量很大,几乎每个页面都需要加入同样的代码。唯一不同的是不同页面的key是不同的。

同时还有一个缺点,key容易写错。往往是复制,修改key。违反了DRY原则。

验证权限方法:HasPermisstion(key)key:权限编码

阶段二、

由于key很容易些错,对方法进行了修改。页面名称作为key,根据页面名去判断权限。而页面名称不需要作为参数传入,少了一个参数。

因此方法改为HasPermisstion()

在函数体内部,可以通过HttpContext获取页面信息。

由阶段一的100001作为查找关键字,变为default.aspx(请求页面地址)

同样每个页面都需要增加验证方法!

阶段三、

使用Ihttpmodule进行权限的控制。

由于需要读取Session,需要继承接口System.Web.SessionState.IRequiresSessionState 

在事件AcquireRequestState中进行权限判断,调用HasPermisstion()方法。

克服了前两个阶段的缺点。开发这样一个DLL,在web.config进行配置,即可使用。

想取消时,也非常简单,直接在web.config中删除相应的引用即可。无论怎么更改,不需要重新发布网站。

关于Ihttpmodule请查阅资料。

开发环境: c#2008

 

 

 

 

你可能感兴趣的:(权限,IHttpModule)