粒度细到控件的权限管理组件(构想篇)

说老实话我现在还没开始写,原来零散的代码要想拼凑起来还真不是一件容易的事情,懒人做事情就是不想多动,所以看见工作量大了就想偷懒,于是就会花更多的时间来想更容易地解决这个问题。

所以我现在这里把整个构思想法记录下来,等我回家再考虑如何处理。

主要的想法呢上次已经说了,是想做一个高度抽象地组件,具体的表现应该是一个API,而且操作要最简单,比如在一个页面只需要在load事件里实例化一次就可以自动的判断页面的URL和遍历Cookie和Session去匹配用户登录标示里的用户ID,然后再数据库里查询对应关系来判断是否具备权限,如果这个页面包含需要控制的控件,就遍历目录查找控件,然后根据权限来设置这些控件的Enabled为true或者false。

再次精化一下构思,在个页面都去读数据库的效率太低。

所以我们在系统开始运行的时候--Application start开始就把所有的资源信息缓存进内存。

然后再用户登录的时候,把用户的ID所在的Role所有的资源的ID用数组的方式纪录进Session(Cookie是可以被篡改的,不好),然后判断的事情就在内存里完成了。

这里有几个问题

首先是Applicationstart事件在什么地方注册,然后如果用HttpModule的话在起作用的时候又不能控制到页面上的控件。

在这里我初步的想法是通过HttpModule注册事件和控制页面的权限,然后通过一些Public的类来控制登录,在登陆的时候把用户ID传进来,在页面上需要对控件权限作限制的页面在load事件里实例化一个专门的类来专门管控件。

希望看到的大大给点意见和建议

PS,上一篇留言让我看蔡克伦的Permission Base的同学,我搜索了一下,那位蔡大大的Blog已经删了,google了一下在SF上倒是有Release,但是源代码是没有鸟,如果你有的话请联系我

posted on 2007-01-26 10:34 亚历山大同志 阅读(2501) 评论(7)  编辑 收藏 网摘 所属分类: 随笔

评论

#1楼  2007-01-26 11:17 冬冬      

学习了。
这里有个问题,就是权限的参数问题,比如用户对无限级分类中的某些分类具有权限,而另一些则没有,怎么进行控制?这样在用户进行操作的时候,不仅仅应该在UI层进行判断,而且应该自业务层也进行验证(这也是防止攻击的办法)。所以具体的一个权限项目应该是带有参数的。
我认为一个权限系统应该抽象出来,而不能和Url,或者控件的ID相结合。

个人的一点儿想法,见笑了   回复  引用  查看    

#2楼  2007-01-26 12:14 jiangshaofen [未注册用户]

我们的做法是自己实现控件,在其中扩展属性,比如加个resourceId,resourceName,resourceId类型为GUID,自动生成,resourceName就是ID所在页的Title,具体权限统一处理。现在的项目就是这么做的。感觉还好。也就2000多万的项目。   回复  引用    

#3楼  2007-01-28 14:25 ajie [未注册用户]

我有Permission Base的源码,角色部分的设计和你在概要篇写的基本一样,只是多了对资源的许可权限和禁止权限。但是还没解决一个问题,就是数据访问的问题。在全局管理员看到的数据肯定和一般管理员或者普通操作员不一样的。但在角色的设计中,如何能够体现这一点,希望多多指教。
我的联系方式:ajiebp1977@hotmail.com
  回复  引用    

#4楼  2007-02-27 11:10 怪怪 [未注册用户]

你这个问题我觉得入口点选择错误,自己的事情自己负责,从HttpModule和Handler入手肯定有问题,我的建议是你的控件们应该继承自某一基类,然后把自身的状况送到Application级的Singleton中去确认权限,然后改变自身的状态,这样不但能做到Enable与否,也能更详细的控制。

你可以会产生一个问题是如果我的控件无法继承基类怎么办,不能继承就组合,写一个专门干这个事的控件,插到每一个控件中去。这里又产生一个问题,如何插,如过控件不多,就全都继承然后Have这个权限控制的控件,甚至可以为一些特别的控件些写特别的权限控制控件,然后用统一的Builder返回实例。这样还方便指定接口,让干这个事的控件控制有权限需求的控件。如果控件很多,那么就得另想办法,比如一个最简单的workaround,写一个代码生成器(这个你老兄比我熟),把所有用到的控件放入ascx,这个ascx是继承自扩展过的UserControl,可以进行权限控制的。

用我说的这个方法,效率也不会降低的,如果特别想兼顾效率,也有不少workaround,就得慢慢来说了。看起来麻烦,其实绝对不比你帖子说的方法多写几行代码,扩展性、自由度高的多。如果我对你的需求理解无误,我这个肯定是最佳方案了,信不信由你^^

还有楼上的,别成天就两千多万三千多万的,你拿到多少?这口气可得罪人啊。   回复  引用    

#5楼  2007-06-08 20:27 cai ke lun [未注册用户]

Permission Base的源码也包含在sf上可供下载的zip文件中。(在sf上发布项目一定要包含源码的)   回复  引用    

#6楼  2007-08-04 23:14 静水≈深流      

这个怎么没下文了   回复  引用  查看    

#7楼  2007-08-20 22:38 Little Snail      

也就2000多万的项目。
  回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-01-26 20:26 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接:
 

导航

公告

鉴于很多TX投诉黑色背景杀伤眼球,遂换个容易阅读的

<2007年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

统计

与我联系

搜索

 

常用链接

留言簿(30)

我参加的小组

我的标签

随笔分类(84)

随笔档案(83)

相册

朋友的Blog

同事的Blog

最新随笔

积分与排名

最新评论

阅读排行榜

评论排行榜