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

2022-07-13 08:15:11 字數 2236 閱讀 8583

在linux檔案系統中,乙個使用者對檔案或目錄所擁有的許可權分為三種:」可讀」、」可寫」和」可執行」,分別用 1 、2 和 4 來表示,它們之間可以任意組合:有「可讀」、「可寫」許可權就用 3 來表示(1 + 2 = 3);有」可讀「、」可執行「許可權就用5來表示(1 + 4 = 5),三種許可權全部擁有就用 7 表示(1 + 2 + 4 = 7)。

實際上,這種運算是基於二進位制的。

假設可執行、可寫、可讀三種許可權分別對應三個狀態位,如果使用者具有某種許可權,那麼將對應的狀態位標識為「1」,反之則標識為「0」。如圖:

如果只有「可讀」許可權,那麼就對應二進位制數:001,將這個二進位制數轉成十進位制就得到1;如果同時具有「可讀」、「可寫」許可權,二進位制數則對應為: 011,轉十進位制得:3;同理,三種許可權都有的,十進位制就等於7。

過位運算子很容易就可以做到類似的許可權控制:

//

定義許可權

//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";

php語言本身的錯誤控制也是用位運算來做的,它甚至還利用了按位異或和按位非,使得錯誤控制更加精確。

增加和刪除許可權

原理: 將每個二進位制位為乙個許可權標識位

define("public_article",    1);        //

發行文章

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). "

";

優點和缺陷位運算的運算物件是二進位制的位,速度快,效率高,而且節省儲存空間,位運算做許可權控制又相當地靈活。但是,位運算也有很大的侷限,因為在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 ...