当前位置: 首页 > news >正文

巧妙运用二进制验证权限

在权限分配中有多个权限级别,不同用户分别有多个不同的权限。

论坛的权限:

查看、发帖、投票、搜索

用户的权限:

用户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

相关文章:

  • 网站部署成功...
  • 将SCOM2007代理升级到 System Center 2012 SP1
  • 一道有意思的问题
  • Ubuntu系统连接Android真机测试
  • 台湾校长高震东的演讲!
  • Node.js连接postgres
  • HFSoft.Data 2.0的Nunit测试用例
  • squid代理配置与应用
  • MDX函数使用介绍(四):字符串函数元组函数
  • magento中给form添加输入验证
  • Mediator 用一个中介者对象来封装一系列的对象交互。中介者使各个对象不需要显式的相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。...
  • 报表服务入门(实验7)手动添加报表
  • VSM应用2
  • 动态向下拉菜单添加内容
  • 关于“跨语言调用”和“CLS(公共语言规范)”的一点体会(转)
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 《Java编程思想》读书笔记-对象导论
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2019.2.20 c++ 知识梳理
  • codis proxy处理流程
  • ES6 ...操作符
  • ES6简单总结(搭配简单的讲解和小案例)
  • Mac转Windows的拯救指南
  • React-flux杂记
  • vue2.0项目引入element-ui
  • vue中实现单选
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 初识MongoDB分片
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从重复到重用
  • 基于Android乐音识别(2)
  • 浅谈web中前端模板引擎的使用
  • 深度学习入门:10门免费线上课程推荐
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 我看到的前端
  • 责任链模式的两种实现
  • 如何正确理解,内页权重高于首页?
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (7)STL算法之交换赋值
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (day6) 319. 灯泡开关
  • (HAL库版)freeRTOS移植STMF103
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (第一天)包装对象、作用域、创建对象
  • (翻译)terry crowley: 写给程序员
  • (一)Java算法:二分查找
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • ***原理与防范
  • .equals()到底是什么意思?
  • .Net 8.0 新的变化
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET多线程执行函数
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .Net开发笔记(二十)创建一个需要授权的第三方组件