文档章节

用位操作来表示操作权限

stone_
 stone_
发布于 2016/04/13 18:50
字数 677
阅读 123
收藏 3

常见的位运算

运算符号
意义 运算对象类型 运算结果类型 实例
~ 非运算 整型、字符串 整型 ~a
& 与运算 整型、字符串 整型 a&b
| 或运算 整型、字符串 整型 a|b
^ 异或运算 整型、字符串 整型 a^b
<< 位左移运算 整型、字符串 整型 a<<2
>> 位右移运算 整型、字符串 整型 b>>2

权限管理办法是一个普遍采用的方法,主要是使用到"位运行符"操作,& 位与运算符、| 位或运行符。参与运算的如果是10进制数,则会被转换至2进制数参与运算,然后计算结果会再转换为10进制数输出。

添加权限使用或
判断权限使用与
去掉权限用异或

举例:

<?php

//赋予权限值-->删除:8、上传:4、写入:2、只读:1
define("mDELETE",8);
define("mUPLOAD",4);
define("mWRITE",2);
define("mREAD",1);

//部门经理,拥有所有权限
echo mDELETE | mUPLOAD | mWRITE | mREAD   //相当于 8 + 4 + 2 + 1 = 15

//判断权限
if($key & mDELETE){
	echo '有删除权限<br>';
}
else{
	echo '无删除权限<br>';
}
if($key & mUPLOAD){
	echo '有上传权限<br>';
}
else{
	echo '无上传权限<br>';
}
if($key & mWRITE){
	echo '有写权限<br>';
}
else{
	echo '无写权限<br>';
}
if($key & mREAD){
	echo '有读权限<br>';
}
else{
	echo '无读权限<br>';
}

//删除权限
$nkey = $key ^ mUPLOAD;

echo '删除上传权限后<br>';
echo "key=$nkey<br>";

if($nkey & mUPLOAD){
	echo '有上传权限<br>';
}
else{
	echo '无上传权限<br>';
}

1. 为什么常量都是2的幂次,而不是随便的整数:保证一位一权限.方便与或等操作.这是使用位表示权限的前提。

2. 与运算之后移位的原因 :因为与操作后, 右边还出现有其他0,通过移位,结果就是0或1,能简化判断。注意移位与初始值时的移位一样。

3.有几位就可以表示几种权限,32位可以表示32种权限。

做好权限值的分布,即那个1、2、4、8、16....(这里还有个顺序问题,越高级的权限就要越高的权限值,比如上面的例子所演示的删除权限)。有了权限分布表就可以确定给某个人什么权限了,你简单的理解成要哪个权限就加上相应的权限值吧。

这个方法很好用的,缺点就是如果权限分布得细的话,那么权限值会越来越大,你自己想想,2的几次方、如果所有的权限都要则是全部相加。不过对于一般的权限来说这个已经足够了。

© 著作权归作者所有

共有 人打赏支持
stone_
粉丝 20
博文 221
码字总数 163611
作品 0
洛阳
程序员
私信 提问
chmod g+s 、chmod o+t 、chmod u+s

Set uid, gid,sticky bit的三个权限的详细说明 一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组. 如果是一个可执...

207矿工
2016/04/21
0
0
linux set uid ,set gid,sticky bit权限详细说明

一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组. 如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该...

yolks丶
2016/10/09
0
0
linux文件权限和访问模式

一.linux为不同的文件赋予了不同的权限,每个文件都有下面三种权限: 1.所有者权限:文件所有者能够进行的操作 2.组权限:文件所属用户组能够进行的操作 3.外部权限:其他用户能够进行的操作...

Tanswer_
2016/05/31
0
0
关于set uid ,set gid,sticky bit的三个权限的详细说明

一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组. 如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该...

90xa
2015/12/10
45
0
Set uid, gid,sticky bit的三个权限的详细说明

转自:http://forum.ubuntu.org.cn/viewtopic.php?t=136913   每个文件都有一个所有者,表示该文件是谁创建的。同时,该文件还有一个组编号,表示该文件所属的组,一般为文件所有者所属的组...

科技探索者
2017/11/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
36分钟前
0
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部