在linux檔案系統中,乙個使用者對檔案或目錄所擁有的許可權分為三種:」可讀」、」可寫」和」可執行」,分別用 1 、2 和 4 來表示,它們之間可以任意組合:有「可讀」、「可寫」許可權就用 3 來表示(1 + 2 = 3);有」可讀「、」可執行「許可權就用5來表示(1 + 4 = 5),三種許可權全部擁有就用 7 表示(1 + 2 + 4 = 7)。
實際上,這種運算是基於二進位制的。
假設可執行、可寫、可讀三種許可權分別對應三個狀態位,如果使用者具有某種許可權,那麼將對應的狀態位標識為「1」,反之則標識為「0」。如圖:
如果只有「可讀」許可權,那麼就對應二進位制數:001,將這個二進位制數轉成十進位制就得到1;如果同時具有「可讀」、「可寫」許可權,二進位制數則對應為: 011,轉十進位制得:3;同理,三種許可權都有的,十進位制就等於7。
過位運算子很容易就可以做到類似的許可權控制:
<?php
//定義許可權
define(
'read'
, 1<< 0);
// 把可讀許可權放在最右邊
define(
'write'
, 1<<1);
// 可讀許可權向左移一位
define(
'excute'
, 1<<2);
// 可執行許可權向左移兩位
//賦予許可權
$user_permission
= read | write;
//驗證許可權
echo
'可讀:'
, (
$user_permission
& read) ?
'yes'
:
'no'
,
"\n"
;
echo
'可寫:'
, (
$user_permission
& write) ?
'yes'
:
'no'
,
"\n"
;
echo
'可執行:'
, (
$user_permission
& excute) ?
'yes'
:
'no'
,
"\n"
;
?>
php語言本身的錯誤控制也是用位運算來做的,它甚至還利用了按位異或和按位非,使得錯誤控制更加精確。
位運算的運算物件是二進位制的位,速度快,效率高,而且節省儲存空間,位運算做許可權控制又相當地靈活。但是,位運算也有很大的侷限,因為在32位計算機上,位移不能超過32次,這就要求許可權數量不超過32種。
原文**:
利用位運算進行許可權管理
在linux檔案系統中,乙個使用者對檔案或目錄所擁有的許可權分為三種 可讀 可寫 和 可執行 分別用 1 2 和 4 來表示,它們之間可以任意組合 有 可讀 可寫 許可權就用 3 來表示 1 2 3 有 可讀 可執行 許可權就用5來表示 1 4 5 三種許可權全部擁有就用 7 表示 1 2 4 7 ...
使用位運算進行許可權控制
使用位運算進行許可權控制非常普遍。如 0000 表示初始化,0001 表示新增,0010 表示編輯,0100 表示更新,1000 表示查詢。使用2的次方表示各個許可權值 當給使用者賦許可權時採用按位或運算 如 賦查詢,新增許可權 0000 1000 0001 10001,最後把各個許可權進行或運算之...
php位運算許可權管理
簡單許可權類 class peak auth 本類不允許物件複製的操作 public function clone 設定許可權的詳細資訊 param string authmessage public function setauthmessage authmessage 獲取權名稱 return ...