在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語言本身的錯誤控制也是用位運算來做的,它甚至還利用了按位異或和按位非,使得錯誤控制更加精確。定義許可權
//1read=1, 把可讀許可權放在最右邊
define('write', 1<<1); //
write=2, 可讀許可權向左移一位
define('excute', 1<<2); //
excute=4, 可執行許可權向左移兩位
//賦予許可權
$user_permission = read | write; //
$user_permission=3,表示有讀和寫的許可權
//驗證許可權
echo '可讀:', ($user_permission & read) ? 'yes' : 'no', "\n";
echo '可寫:', ($user_permission & write) ? 'yes' : 'no', "\n";
echo '可執行:', ($user_permission & excute) ? 'yes' : 'no', "\n";
增加和刪除許可權
原理: 將每個二進位制位為乙個許可權標識位
define("public_article", 1); //優點和缺陷位運算的運算物件是二進位制的位,速度快,效率高,而且節省儲存空間,位運算做許可權控制又相當地靈活。但是,位運算也有很大的侷限,因為在32位計算機上,位移不能超過32次,這就要求許可權數量不超過32種。發行文章
define("create_article", 2); //
新增文章
define("modify_article", 4); //
修改文章
define("delete_article", 8); //
刪除文章
define("sharch_article", 16); //
搜尋文章
define("create_comment", 32); //
define("delete_comment", 64); //
//所有的許可權
$final_allow = public_article | create_article |modify_article
| delete_article | sharch_article | create_comment |delete_comment;
echo "管理者擁有的全部許可權:" .decbin($final_allow). "
";
$no_shearch_allow = $final_allow ^sharch_article;
echo "僅無法搜尋文章的許可權:" .decbin($no_shearch_allow). "
";
//編輯人員獨有的許可權
$editor_allow = public_article | modify_article |delete_article;
$no_editor_allow = $final_allow & ~$editor_allow
;
echo "非編輯人員所有的許可權:" .decbin($no_editor_allow). "
";
利用位運算進行許可權管理
在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 ...