如何做系统权限设计[摘录]

最近看了别人的设计方法,大多以“整数”来表示权限值,如添加、浏览、删除和修改,分别用1、2、4、8这几个整数来代替,不过,各人的做法有所不同,举例如下:

1. 用2的n次幂组成权限值的集合,如1、2、4、8、16...,某用户的权限值为其子集中的整数之和,如 7=1+2+4,5=1+4。如果要从数据库检索包含某几种权限的用户,则先把这几种权限值相加,假设和为k,然后select * from table where 1 and 用户权限值 = 'k';如果要判断某用户有哪些权限,则取出其权限值k,分别用k&1,K&2,K&4,k&16...,如果为真,则 表示有值等于“&”右边整数的权限,例如,如果k&4为真,则此用户有权限表中值等于4的权限;

通用技术方式

(权限列表)2 4 8 16 32

权限值等于权限相加。

权限值 20那么  二进制为10100

1     0    1    0  0

16   8    4    2   1       右到左依次 2的0次方  2的1次方   2的2次方   2的3次方 2的4次方 

上下相乘结果为 16 和4 

权限值 22那么  二进制为10110

1     0    1    1  0

16   8    4    2   1       右到左依次 2的0次方  2的1次方   2的2次方   2的3次方 2的4次方 

上下相乘结果为 16 ,4,2 

C#计算方式

20&16=16 如果为真表示有此权限

posted @ 2011-07-06 11:12  coding111  阅读(904)  评论(3编辑  收藏  举报