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

 

 

 

 

转载于:https://my.oschina.net/u/147591/blog/24019

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值