php位運算的許可權設計

2021-08-03 03:17:48 字數 2746 閱讀 5846

位運算的運算物件是二進位制位,速度快,效率高,而且節省空間,位運算做許可權控制也相當的靈活。但是位運算有很大的侷限,位移不能超過32次,這就要求許可權的數量不超過32中。

將許可權按照2的n次方來定義值,一次類推。為什麼要這個樣子定義,這個樣紙的定義是為了保證每個許可權值(二進位制)中只有乙個1,而它恰好對應一種許可權。比如:

define

('add', 1); // 增加許可權

define

('upd', 2); // 修改許可權

define

('sel', 4); // 查詢許可權

define

('del', 8); // 刪除許可權

許可權操作其實涉及到「角色」這個概念。進行許可權操作不外乎讓某個角色賦予某種許可權、禁止某種許可權和檢測某個角色是否擁有某種許可權。相對於這三個操作,可以使用二進位制數間的運算操作很方便實現。

// 給予某種許可權用到「位或」運算子

$a_access = add | upd | sel | del; // a擁有增刪改查許可權

$b_access = add | upd | sel; // b擁有增改查許可權

$c_access = add | upd; // c擁有增改許可權

// 禁止某種許可權用「位與」和「位非」運算子

$d_access = $c_access & ~upd; // d只擁有了增許可權

// 檢測是否擁有某種許可權用到「位與」運算子

var_dump($b_access & add); // 1代表b擁有增許可權

var_dump($b_access & del); // 0代表b不擁有刪許可權

運用上面的許可權操作方法,可以簡單地封裝成乙個許可權類和乙個角色類。

/**

* 簡單許可權類

*/class peak_auth

/*** 本類不允許物件複製的操作

* */

public function __clone()

/*** 設定許可權的詳細資訊

*@param string $authmessage

*/public function setauthmessage($authmessage)

/*** 獲取權名稱

*@return int

*/public function getauthname()

/*** 獲取許可權值

*@return int

*/public function getauthvalue()

/*** 獲取許可權的詳細資訊

*@return string

*/public function getauthmessage()

}/**

* 簡單角色類

*/class peak_role

}/**

* 獲取父角色的許可權

*/protected function fetchparentauthvalue()

}/**

* 給予某種許可權

*@param peak_auth $auth $auth

*@return 以便鏈式操作

*/public function allow(peak_auth $auth)

/*** 阻止某種許可權

**@param peak_auth $auth

*@return peak_role 以便鏈式操作

*/public function deny(peak_auth $auth)

/*** 檢測是否擁有某種許可權

**@param peak_auth $auth

*@return boolean

*/public function checkauth(peak_auth $auth)

/*** 獲取角色的許可權值

**@return int

*/public function getauthvalue()

}

// 建立三個許可權:可讀、可寫、可執行

$read

=new peak_auth('canread');

$write

=new peak_auth('canwrite');

$exe

=new peak_auth('canexe');

// 建立乙個角色 user

$user

=new peak_role('user');

// 建立另乙個角色 admin,他擁有 user 的所有許可權

$admin

=new peak_role('admin', $user);

// 給予 user 可讀、可寫的許可權

$user

->allow($read)->allow($write);

// 給予 admin 可執行的許可權,另外他還擁有 user 的許可權

$admin

->allow($exe);

// 禁止 admin 的可寫許可權

$admin

->deny($write);

// 檢測 admin 是否具有 某種許可權

var_dump($admin

->checkauth($read));

var_dump($admin

->checkauth($write));

var_dump($admin

->checkauth($exe));

PHP位運算許可權設計

首先將許可權按照2的次方來定義值,依次類推 define add 1 增加許可權 define upd 2 修改許可權 define sel 4 查詢許可權 define del 8 刪除許可權 a access add upd sel del a擁有增刪改查許可權 b access add upd...

php位運算許可權管理

簡單許可權類 class peak auth 本類不允許物件複製的操作 public function clone 設定許可權的詳細資訊 param string authmessage public function setauthmessage authmessage 獲取權名稱 return ...

php 位運算許可權問題

許可權問題比如 linux角色許可權 可讀 可寫 可執行 許可權二進位制分別是100 010 001,十進位制就是4 2 1,資料庫許可權欄位若為state 預設為0,通常許可權都是多選框形式,如下圖 可執行 label 3div 4 br 5 div class row style margin ...