您的位置:首页 > 其它

二进制实现权限验证

2015-05-30 16:32 357 查看
在权限分配中有多个权限级别,不同用户分别有多个不同的权限。
论坛的权限:
查看、发帖、投票、搜索
用户的权限:
用户A:查看、发帖
用户B:查看
用户C:查看、发帖、投票、搜索
分析:
有四种不同的权限级别,总共2^4种权限分配方式。
 
像这样权限等级划分和不同级别用户的权限分配采用二进制方式权限分配验证方式是最好的选择。即每一个操作权限都用一个二进制数表示(1、10、100、1000)。总共的权限种类有2^n种,n即代表权限类别。在C#中long类型有64位,所以总共有64类权限,2^64种权限分配方式。权限的分配、删除、查看都采用二进制运算实现。
 


long userrolevalue;//用户的操作权限
long oprolevalue;//一个操作的权限
 
1.权限的分配(或运算)
userrolevalue = userrolevalue | oprolevalue
 


(00001110)2=(00000010)2|(00000100)2|(00001000)2
 
2、权限的删除(求补、与运算)

userrolevalue = userrolevalue & (~oprolevalue)
 


 
3、权限的验证(与运算)
(userrolevalue & oprolevalue) == oprolevalue
(00000101)2 &( 00000011)2 ==(00000001)2
如果通过验证则具有相应类别的权限。
 
此验证方法,还可以用在菜单权限的验证上来。根据要划分的权限等级数量可以选择相应的数据类型,比如int类型默认的是32位的,short是16位的。
 
附:逻辑(布尔型)运算符用于对bool型的结果的表达式进行运算,运算的结果都是bool型。其运算结果如下所示:
 
运算符 运算 例子 结果
&AND(与)false&trueFALSE
|OR(或)false|trueTRUE
^XOR(异或)false^trueTRUE
!NOT(非)!falseTRUE
&&AND(短路)false&&trueFALSE
||OR(短路)false||trueTRUE
作者: 初行 

Q Q: 121866673 

 

QQ群: 313686804(验证:博客园) 

来源: http://zxlovenet.cnblogs.com 

声明: 本文原创发表于博客园,作者为初行本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: