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无文员权限;
相关推荐
根据提供的文件信息,我们可以深入探讨基于二进制树的嵌入式Linux系统命令行的研究。 ### 嵌入式系统概述 嵌入式系统是一种专为特定应用设计的计算机系统,它结合了硬件和软件的功能,并针对特定的任务进行了优化...
Android基于Linux内核构建,因此支持许多与Linux相似的功能,比如可以运行二进制可执行文件。但是,由于Android自身的特性(如应用程序的安全沙箱、资源管理机制等),直接在Android上运行二进制文件与在普通Linux...
VB支持位运算符,如AND、OR、XOR和NOT,这些运算是基于二进制位的。例如,如果我们有一个权限码,可以用一个32位的整数来表示,其中每一位代表一种权限。如果第n位为0,表示用户没有第n种权限;如果为1,则表示有...
DOC文件可能包含敏感信息,因此加密和权限管理非常重要。Word提供了密码保护和数字签名功能,以确保文件的安全性。 总结,Microsoft Word DOC文件格式是办公环境中不可或缺的一部分,它的结构和解析涉及到多方面的...
学生需要了解基本的文件管理、进程控制、权限设置等Linux基础知识。 "实验_第1讲_X86汇编语基本概念.pdf"涵盖了X86汇编语言的基础知识。X86是Intel处理器家族使用的指令集,也是二进制炸弹通常用的语言。理解汇编...
这个“k8s二进制安装包.zip”文件包含了k8s所有必要的组件,使得用户可以直接通过二进制方式在本地或者服务器集群上搭建Kubernetes环境。 在Kubernetes中,主要组件包括: 1. **kube-apiserver**:这是Kubernetes...
在Linux系统中,`su`(switch user)二进制文件是用于切换用户身份的命令,通常用于提升普通用户到管理员(root)权限。当遇到“su二进制文件过旧问题”时,这意味着系统中的`su`程序版本可能已落后,无法满足当前...
"基于NFS实现的storageclass二进制部署文件和镜像" 提供了一种实用的方法来设置Kubernetes中的存储类(StorageClass),特别是利用网络文件系统(Network File System,NFS)作为持久化存储。 首先,我们来理解一下...
3. **权限设置**:确保Anki有执行Mplayer的权限,特别是当Anki以非管理员权限运行时,可能需要手动调整文件的权限设置。 4. **编码支持**:Mplayer支持多种编码格式,但不是所有格式都默认包含。如果遇到无法播放的...
在Linux arm64环境下安装Apache IoTDB(IoT Database)二进制包是一个涉及系统兼容性、软件包管理以及数据库配置的过程。Apache IoTDB是一款专为物联网(IoT)设计的时序数据库管理系统(TSDB),它具有高性能、低...
在Windows Mobile (WM) 平台,特别是基于WM6.0的设备上处理二进制图片,涉及到一系列的编程技术和概念。以下将详细介绍这个领域的关键知识点: 1. **Windows Mobile SDK**:WM6.0是微软针对掌上设备开发的操作系统...
首先,二进制(Binary)是计算机的基础,因为计算机内部的所有操作都是基于二进制的0和1进行的。二进制数的每一位代表2的幂次,例如,二进制数1011对应的十进制值为1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 0 + 2 + 1 =...
这个“Geoserver二进制2.18版本.zip”文件包含的是GeoServer的2.18稳定版本的可执行二进制文件,适用于快速部署和运行。 GeoServer的主要功能包括: 1. **数据发布**:GeoServer能够读取多种地理空间数据格式,如...
以下是一份详细的二进制部署 k8s 集群的步骤,基于 CentOS 7.4 操作系统和 k8s 1.18 版本,以及 Docker 19-ce。 **一、主机环境初始化** 1. **关闭防火墙和服务**:在所有节点上,关闭防火墙服务(`systemctl stop...
这个“apache-activemq-5.15.15二进制包,安装包”包含了运行和配置ActiveMQ所需的所有组件,方便用户在本地计算机或服务器上快速部署和使用。该版本5.15.15是Apache ActiveMQ的一个稳定版本,提供了许多增强的功能...
5. **安装与使用**:在Linux ARM64系统上安装LibreOffice 7.3.0.3,用户通常可以通过包管理器(如apt、yum或zypper)进行,也可以手动解压提供的压缩包,将二进制文件复制到相应目录并设置权限。一旦安装完成,用户...
【二进制文件转换器ha_FlexHEX.rar】是一个基于C++编程语言开发的工具,主要用于处理和转换二进制文件。在IT领域,二进制文件是计算机可以直接理解和执行的数据格式,它包含了机器码和其他低级指令,通常用于程序、...
`openresty-1.19.9.1-win32.zip`是针对Windows 32位系统的OpenResty二进制版本,包含了运行OpenResty所需的所有组件。 1. **OpenResty核心组件**: - **Nginx**:OpenResty基于Nginx,一个高效的反向代理服务器和...