我這裡說到的許可權管理辦法是乙個普遍採用的方法,主要是使用到"位執行符"操作,& 位與運算子、| 位或執行符。參與運算的如果是10進製數,則會被轉換至2進製數參與運算,然後計算結果會再轉換為10進製數輸出。
它的許可權值是這樣的
2^0=1,相應2進數為"0001"(在這裡^我表示成"次方",即:2的0次方,下同)
2^1=2,相應2進數為"0010"
2^2=4,相應2進數為"0100"
2^3=8,相應2進數為"1000"
要判斷乙個數在某些數範圍內就可以使用 & 運算子(數值從上面的表中得來)
如:7=4|2|1 (你也可以簡單理解成7=4+2+1)
用 & 來操作,可以知道7&4、7&2、7&1都是真的,而如果7&8則是假的
&、| 不熟悉的就要去查查手冊,看看是怎麼用的了
下面來看例子吧:
<?
// 賦予許可權值-->刪除:8、上傳:4、寫入:2、唯讀:1
define("mdelete",8);
define("mupload",4);
define("mwrite",2);
define("mread",1);
//vvvvvvvvvvvvv使用說明vvvvvvvvvvvvv
//部門經理的許可權為(假設它擁有此部門的所有許可權),| 是位或執行符,不熟悉的就查查資料
echo mdelete|mupload|mwrite|mread ,"
";// 相當於是把上面的許可權值加起來:8+4+2+1=15
// 設我只有 upload 和 read 許可權,則
echo mupload|mread ,"
";//相當於是把上傳、唯讀的許可權值分別相加:4+1=5
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//判斷某人的許可權可用,設許可權值在$key中
$key = 13;//13=8+4+1
if($key & mdelete) echo "有刪除許可權
"; //8
if($key & mupload) echo "有上傳許可權
"; //4
$a=$key & mwrite; echo "有寫許可權
".$a; //無此許可權
if($key & mread) echo "有讀許可權
"; //1
?>
ok,許可權分值的這其中乙個演算法就是這樣的,可以說是簡單高效。也不知大家明白沒有,不明白也沒關係,記住例子就行了。前提就是做好許可權值的分布,即那個1、2、4、8、16....(這裡還有個順序問題,越高階的許可權就要越高的許可權值,比如上面的例子所演示的刪除許可權)。有了許可權分布表就可以確定給某個人什麼許可權了,你簡單的理解成要哪個許可權就加上相應的許可權值吧。
這個方法很好用的,缺點就是如果許可權分布得細的話,那麼許可權值會越來越大,你自己想想,2的幾次方、如果所有的許可權都要則是全部相加。不過對於一般的許可權來說這個已經足夠了。
C 列舉權值位運算示例
以下是列舉權值位執行示例 public static void runsnippet 列舉 說明 1 flags 標識列舉可以用於權值位運算 2 用於對左移運算,將左邊數移動第二個數到指定的位數,1 0 將左邊數字1移動0,則返回的值保持不變。移動的位數為2的n次方 flags public enu...
位運算(1) 初識位運算
前段時間數電課學了些進製轉換,還有與或非等邏輯運算,如今再來看看位運算,倒輕鬆了不少。很早就想寫些非總結性部落格了,奈何還是太懶。也也不知怎的突然又來了興致,趕忙寫下這篇部落格。廢話不多說,今天準備總結總結關於位運算的知識。程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的,即0 1兩種狀態,...
位運算子和位運算
一 按位與 運算子 1 運算規則 參加運算的兩個 資料,按二進位進行 與 運算,如果兩個相應的二進位都為1,則該位的結果值為1,否則為0,即 0 0 0,0 1 0,1 0 0,1 1 1.2 用途 1 清零 運算物件 原來的數中為1的位,新數中相應位為0。2 取乙個數中某些指定位。如想要取乙個整數...