在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中,通過位運算子很容易就可以做到類似的許可權控制:
<?phpphp語言本身的錯誤控制 也是用位運算來做的,它甚至還利用了按位異或和按位非,使得錯誤控制更加精確。//定義許可權
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";
?>
位運算的運算物件是二進位制的位,速度快,效率高,而且節省儲存空間,位運算做許可權控制又相當地靈活。但是,位運算也有很大的侷限,因為在32位計算機上,位移不能超過32次,這就要求許可權數量不超過32種。
延伸閱讀:
使用位運算進行許可權控制
使用位運算進行許可權控制非常普遍。如 0000 表示初始化,0001 表示新增,0010 表示編輯,0100 表示更新,1000 表示查詢。使用2的次方表示各個許可權值 當給使用者賦許可權時採用按位或運算 如 賦查詢,新增許可權 0000 1000 0001 10001,最後把各個許可權進行或運算之...
基於角色的許可權控制
asp forums中基於角色的許可權控制 asp.頁面如何控制頁面依據不同使用者許可權有不可見 可見 編輯 三種操作許可權 做過許可權管理和想做許可權管理的人進來 附我的思路 懇求許可權分配的例子 高分求使用者許可權管理 c 或演算法 請問在 artclient應用中,如何做到科學的身份驗證和許可...
基於角色的許可權控制
aspnetforums中基於角色的許可權控制 asp.net頁面如何控制頁面依據不同使用者許可權有不可見 可見 編輯 三種操作許可權 做過許可權管理和想做許可權管理的人進來 附我的思路 懇求許可權分配的例子 高分求使用者許可權管理 c 或演算法 請問在smartclient應用中,如何做到科學的身...