利用位運算進行許可權管理

2021-07-09 16:36:45 字數 1756 閱讀 7658

在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 ...