1、权限值的设定
用二进制来表示权限值应该是按位来设置,每个位占一个,表示一种权限,如:
00000001表示十进制1,
00000010表示十进制2,
00000100表示十进制4,
00001000表示十进制8;
依次类推,才能清晰正确的标识,多种权限的赋予则使用“或运算”,此时各位比较混乱,如00000011表示十进制3,此时它意味着拥有两种权限。
Long userrolevalue ;//用户的权限值,根据他属于的权限组,这个值会不同
Long oprolevalue ;//一个操作的权限值,根据他属于的权限组,这个值会不同
2、权限的赋予(或运算)
userrolevalue = userrolevalue | oprolevalue
假设一个用户u1,他的初始权限值为0(00000000)。如果要指定他有经理的权限,经理的权限值为4(00000100),在第三个二进制位为1。
很显然,userrolevalue = 0 | 4 ,值为4,如果u1要同时具有文员、主管、经理的权限呢,
userrolevalue = 0 | 1 00000000 | 00000001 = 00000001
userrolevalue = 1 | 2 00000001 | 00000010 = 00000011
userrolevalue = 3 | 4 00000011 | 00000100 = 00000111
这样,第1、2、3位都是1了,用 “或”的好处就是只改变指定位的值,如果用户已经有了该权限,直接简单的用加法来做会出错,而用"或"再赋予一次,也不会出错,如下:
userrolevalue = 7 | 4 00000111 | 00000100 = 00000111
3、权限的除去(求补、与运算)
userrolevalue = userrolevalue & (~oprolevalue)
假设一个用户u1,他的初始权限值为7(00000111),说明他能做文员、主管、经理权限组所能作的所有操作。如果不想让他有主管权限组能作的操作呢,那么,就要把他的权限值变为00000101,而主管权限组的权限值是00000010,显然简单的用减法,肯定也是不行的,但是先对00000010作补运算,可以得到11111101,再同00000111作与运算,就得到了00000101,这样就只对第二位作了改变,不会影响到其它位,我们的目的也就达到了。
对于一个操作,哪些权限组能操作它,也可以用与运算来做,不让某些权限组有些操作的权限,也可以先求补,再作与运算来解决。
4、权限的验证(与运算)
(userrolevalue & oprolevalue) != 0表示拥有oprolevalue所表示权限
例如:现有一个用户User的权限为6(00000110),通过&(与)运算,使用公式 "(User的权限 & 权限值) != 0" 即可判断拥有某个权限值表示的权限----6 & 2 == 2 (00000110 & 00000010 == 00000010),表示User拥有主管权限;6 & 4 !=0 (00000110 & 00000100 == 00000100) ,表示User拥有经理权限;6 & 1 == 0(00000110 & 00000001 == 00000000),表示User无文员权限;
相关推荐
圣诞老人 Santa是用于macOS的二进制授权系统。 它由监视执行情况的内核扩展(或macOS 10.15+上的系统扩展),基于SQLite数据库的内容制定执行决策的userland守护程序,在发生阻塞决策时通知用户的GUI代理组成。还有...
酒店菜品是本系统的重点功能,客户端用户登录后发布酒店菜品,选择对应的分类,上传图片,其中图片是保存在服务器端,数据库记录对应的图片链接地址,在资源类信息保存中还可以通过二进制进行保存。本系统为了降低...
2、以二进制格式保存文件,杜绝硬盘病毒感染,保密安全; 3、分布式数据库存储技术,不限文件格式,支持海量存储; 4、集成图片和音乐播放功能,实现电子相册般的浏览体验; 5、多条件智能搜索技术,帮助您快速...
源码 该项目使用.net编写 使用SQL Server2005数据库 基于工厂模式开发 项目共分七大模块,权限管理实现对用户、... 权限管理使用AJAX技术和二进制方式控制数据库 方便快捷 已经实现带数据库的打包安装 直接安装可用
JeeSpringCloud是一个基于SpringBoot2.0的后台权限管理系统,界面简洁美观敏捷开发系统架构。核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。 互联网云快速开发框架,微服务分布式代码生成的敏捷开发系统...
二进制日志(Binary Log,binlog):记录对数据库进行数据更改(如INSERT、UPDATE、DELETE)的操作序列,用于数据复制和恢复。 查询日志(query log):可选地记录所有发送到MySQL服务器的SQL查询,用于调试和审计...
初始模板基于: : 模板文档: : 构建设置 # 配置镜像加速 https://www.ydyno.com/archives/1219.html # 安装依赖 npm install # 启动服务 localhost:8013 npm run dev # 构建生产环境 npm run build:prod 常见问题...
二进制日志(Binary Log,binlog):记录对数据库进行数据更改(如INSERT、UPDATE、DELETE)的操作序列,用于数据复制和恢复。 查询日志(query log):可选地记录所有发送到MySQL服务器的SQL查询,用于调试和审计...
它将具有以啤酒厂为主题的仪表板,该仪表板具有登录功能和基于二进制权限的可互换仪表板组件。 组件将是企业从大量数据(存储在mongodb中)中浏览信息的最小集合。 该项目利用完整的MERN堆栈来CRUD数据并在可视化...
版本V9Lumberjack 日志切割工具, 高效分离大日志文件, 按日期保存文件Viper 配置管理工具, 支持多种配置文件类型Packr 文件打包工具, 轻松将静态文件打包到编译后的二进制应用中GoFunk 常用工具包, 某些方法无需...
我们使用 gobuild 来完成在线跨平台编译工作,您可以在 这里 找到完整的二进制下载列表。 通过源码安装 go get -u github.com/gpmgo/gopm 可执行文件将会生成在 $GOPATH/bin 目录下;为了更加方便的...
二进制日志(Binary Log,binlog):记录对数据库进行数据更改(如INSERT、UPDATE、DELETE)的操作序列,用于数据复制和恢复。 查询日志(query log):可选地记录所有发送到MySQL服务器的SQL查询,用于调试和审计...
云优CMS企业网站管理系统(分站版)是一套基于PHP+MYSQL为核心开发的专业营销型企业建站系统。... 2、建议打包至服务器解压确保文件完整性,通过FTP上传请使用二进制模式;3、如使用伪静态,请将对应“伪静态”文
二进制日志(Binary Log,binlog):记录对数据库进行数据更改(如INSERT、UPDATE、DELETE)的操作序列,用于数据复制和恢复。 查询日志(query log):可选地记录所有发送到MySQL服务器的SQL查询,用于调试和审计...
二进制日志(Binary Log,binlog):记录对数据库进行数据更改(如INSERT、UPDATE、DELETE)的操作序列,用于数据复制和恢复。 查询日志(query log):可选地记录所有发送到MySQL服务器的SQL查询,用于调试和审计...
然后获取密钥,更新到你的配置文件中()旧版配置文件util/QiniuFileUtil主要功能系统用户,角色...后台基本二进制文件,放到二进制相应目录中重启tomcat可直接使用,预览系统定时任务的添加改查立即启动暂停恢复技术框
二进制日志(Binary Log,binlog):记录对数据库进行数据更改(如INSERT、UPDATE、DELETE)的操作序列,用于数据复制和恢复。 查询日志(query log):可选地记录所有发送到MySQL服务器的SQL查询,用于调试和审计...
二进制日志(Binary Log,binlog):记录对数据库进行数据更改(如INSERT、UPDATE、DELETE)的操作序列,用于数据复制和恢复。 查询日志(query log):可选地记录所有发送到MySQL服务器的SQL查询,用于调试和审计...
二进制日志(Binary Log,binlog):记录对数据库进行数据更改(如INSERT、UPDATE、DELETE)的操作序列,用于数据复制和恢复。 查询日志(query log):可选地记录所有发送到MySQL服务器的SQL查询,用于调试和审计...
快速Java Ffast基于Srping boot 2 + Mybatis Plus后台管理系统前后分离快速开发解决方案简介 Ffast 基于Srping boot + Mybatis Plus后台管理系统前后分离快速开发解决方案,并具备以下特点特色在Mybatis Plus基础上...