posts - 44, comments - 266, trackbacks - 22, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

   我今天在做我們一個新的系統功能權限的時候,有一點新的想法,不知道是不是班門弄斧,歡迎扔雞蛋!
  
  
      
       1.首先定義好具有權限意義的十進制數,如下:

       Add    Delete    Modify    Visiable     十進制    意義
         0          0          0                0                0       該功能不可見
         0          0          0                1                1       該功能只讀
         0          0          1                1                3       該功能有修改權限
         0          1          1                1                7       該功能有修改,刪除權限
         1          0          0                1                9       該功能有新增權限
         1          0          1                1               11     該功能有新增,修改權限
         1          1          0                1               13     該功能有新增,刪除權限
         1          1          1                1               15     該功能有修改,刪除,新增權限

       2.配置用戶權限:

           UserRole               UserDepartment        功能        權限
          common user           總經理辦公室         F1            11
          common user           總經理辦公室         F2             3
          common user           總經理辦公室         F3             0
                 ...                              ...                      ...              ...
 
 3.系統實現:  
   用戶登錄系統,可以跟據用戶Role和Department來取到所有功能和權限配置,然後根據(1)進行解密,得到該用戶應該有的權限!

 這樣有個好處是,結構清晰,權限部份可以獨立,增加系統聚合性,也有一個問題就是當系統新增功能的時候,需要新增用戶權限配置!





Feedback

#1楼    回复  引用  查看    

2006-12-27 09:21 by freetofly      
现在的权限模块大部分不都是这么做的么?
但有个问题啊
1111换成十进制是16????????

#2楼    回复  引用  查看    

2006-12-27 09:44 by adonio      
权限系统本来就是这么做的,好像没见到新的想法

#3楼    回复  引用    

2006-12-27 10:35 by lazy[匿名] [未注册用户]
为什么做权限系统都是新增浏览删除修改呢?
例如要单据编辑时,限制单价的显示,那算是新增还是浏览还是删除还是修改?一直没想明白这个问题

#4楼    回复  引用  查看    

2006-12-27 10:52 by calmzeal      
用二进制比较方便:
1,2,4,8,。。。来组合

#5楼    回复  引用  查看    

2006-12-27 10:53 by calmzeal      
这样判断时通过And Or比较好弄

#6楼    回复  引用  查看    

2006-12-27 11:17 by RicCC      
这只是功能权限,参考其它一些系统,做法复杂一些,但更合理
1. 权限对象。某个业务对象?某个表?某个字段?什么操作?
2. 权限Profiler。作用就是从一堆的权限对象里面选出来分组一下。在用户层面最常见的是对应到某个角色;在开发实现层面,需要对权限对象运算,例如对某个表可以查看但对某个字段不能查看等。
3. Profiler分配给人。一个人可以分配多个Profiler;一个Profiler可以分配给多人。

#7楼    回复  引用  查看    

2006-12-27 11:27 by Daniel Phang      
一般用8421比较方便
0001
0010
0100
1000

#8楼    回复  引用    

2006-12-27 11:41 by ocean2000[匿名] [未注册用户]
@也有一個問題就是當系統新增功能的時候,需要新增用戶權限配置!
没看楼主在根據(1)進行解密的是如何实现的,是否类似与一个
if (right == 13){}
else if(right == 11) {}
……
这样把权限值给写死了。那么在新增的时候岂不是要更改这部分代码?

#9楼    回复  引用  查看    

2006-12-27 12:01 by 让风吹--笨牛      
我最近也在弄权限.
我现在只是粗略的把权限分成了
窗体权限和表权限

如果一个窗体需要进行权限验证,就继承于权限窗体基类.并且指定一个GUID,这样就保证了窗体的唯一性.

当然还有表.也是一样的道继承于权限基类,这样就具有某一些操作.并且支持动态编译来生成权限判断表达式.

目前还没有实现对字段的控制....

#10楼 [楼主]   回复  引用  查看    

2006-12-27 13:16 by 自適應軟件......      
TO: ocean2000[匿名]
你可以把這些寫到一個XML.然後在XML裡面動態配置!
TO: 让风吹--笨牛
想問問,能舉個需要控制字段的例子嗎?

#11楼 [楼主]   回复  引用  查看    

2006-12-27 13:45 by 自適應軟件......      
TO: freetofly
To:adonio
謝謝兩位的回覆!

#12楼    回复  引用    

2006-12-27 14:26 by 虫子[匿名] [未注册用户]
这可是最普通的方式, 掩码权限, 不如用主从表了, 个人愚见. ^_^

#13楼    回复  引用    

2006-12-27 16:15 by sunrise[匿名] [未注册用户]
看看muki的权限控制了。

#14楼    回复  引用    

2006-12-27 17:17 by tianjj [未注册用户]
对于中小型系统,还可以,大型系统,还是RBAC

#15楼    回复  引用  查看    

2006-12-27 22:41 by Anders Cui      
@ocean2000[匿名]
@也有一個問題就是當系統新增功能的時候,需要新增用戶權限配置!
没看楼主在根據(1)進行解密的是如何实现的,是否类似与一个
if (right == 13){}
else if(right == 11) {}
……
这样把权限值给写死了。那么在新增的时候岂不是要更改这部分代码?

如果封装在拥有FlagsAttribute属性的类是不是可以好一点?

#16楼 [楼主]   回复  引用  查看    

2006-12-28 08:29 by 自適應軟件......      
剛剛有了解了RBAC, 不錯!

#17楼    回复  引用  查看    

2006-12-28 09:17 by 臭石头      
if (right == 13){}
else if(right == 11) {}

根本不会出现这种做法,目前权限系统一般都是8421的形式,也就是用二进制表示,那么一个字节8位,就可以表示8种元权限,对应位为1则有权,0则无权。

比如,假设0100 0000第二位是表示有写权限,那么,在判断是否有写权限的时候,是这样的 if(purview & 01000000==0){写}

#18楼    回复  引用  查看    

2006-12-28 09:17 by 臭石头      
应该是!=0的,写错了,不好意思

#19楼    回复  引用    

2006-12-28 11:50 by lovebanyi [未注册用户]
用二进制来感觉不错啊

一个字节.. 相对应某个功能..然后里面的每一位可以表示一种权限

#20楼    回复  引用  查看    

2006-12-28 16:43 by 幕后      
恩`看起来比较清晰`

#21楼    回复  引用    

2006-12-28 21:28 by 黑山 [未注册用户]
不是新想法了。windows窗口的STYLE就用到这个。

#22楼    回复  引用    

2006-12-29 15:08 by ocean2000[匿名] [未注册用户]
@臭石头
难道你没发现我的重点是问这样写代码会把权限验证给写死了,以后添加一个或者删除一个权限就会重新修改代码,而不是你解释的权限的存储方式。

#23楼 [楼主]   回复  引用  查看    

2006-12-29 15:22 by 自適應軟件......      
ocean2000[匿名]

不會啊,設計思想和代碼實現是兩碼事,代碼裡面可以靈活的利用xml配置或數據庫配置動態生成欄位!


對了,大家有沒有開源的權限管理模塊?就像ORM之類的東西!

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


相关链接: