如何做系统权限设计[摘录]
最近看了别人的设计方法,大多以“整数”来表示权限值,如添加、浏览、删除和修改,分别用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 如果为真表示有此权限