用位操做來表示操做權限

常見的位運算php

運算符號
意義 運算對象類型 運算結果類型 實例
~ 非運算 整型、字符串 整型 ~a
& 與運算 整型、字符串 整型 a&b
| 或運算 整型、字符串 整型 a|b
^ 異或運算 整型、字符串 整型 a^b
<< 位左移運算 整型、字符串 整型 a<<2
>> 位右移運算 整型、字符串 整型 b>>2

權限管理辦法是一個廣泛採用的方法,主要是使用到"位運行符"操做,& 位與運算符、| 位或運行符。參與運算的若是是10進制數,則會被轉換至2進制數參與運算,而後計算結果會再轉換爲10進制數輸出。web

添加權限使用或
判斷權限使用與
去掉權限用異或
spa

舉例:code

<?php

//賦予權限值-->刪除:八、上傳:四、寫入:二、只讀: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種權限。it

作好權限值的分佈,即那個一、二、四、八、16....(這裏還有個順序問題,越高級的權限就要越高的權限值,好比上面的例子所演示的刪除權限)。有了權限分佈表就能夠肯定給某我的什麼權限了,你簡單的理解成要哪一個權限就加上相應的權限值吧。table

這個方法很好用的,缺點就是若是權限分佈得細的話,那麼權限值會愈來愈大,你本身想一想,2的幾回方、若是全部的權限都要則是所有相加。不過對於通常的權限來講這個已經足夠了。class

相關文章
相關標籤/搜索