在說權限管理模塊前,應該先知道權限管理模塊要有哪些功能:
1、用戶只能訪問,指定的控制器,指定的方法
2、用戶可以存在於多個用戶組裡
3、用戶組可以選擇,指定的控制器,指定的方法
4、後台可以添加控制器和方法
好了,需求知道了那麼設計數據庫,如下圖:
從圖中可知主要表之間的關系
authority_user與authority_role,多對多
authority_role與authority_control,多對多
authority_role與authority_method,多對多
authority_control與authority_method,1對多
數據表設計好,那就應該寫程序判斷了(php程序)。判斷思路如下:
1、獲取用戶要訪問的控制器和方法。
2、從數據庫中獲取,該用戶擁有的控制器和方法。
3、判斷要訪問的控制器和方法,是否存在用戶擁有的控制器和方法裡。
思路有了,那就寫個demo程序測試下(php程序的ci框架):
function __construct(){ //假設管理員編號為99 $manage_user_id = 99; //獲取要訪問的控制器和方法 $controlName = $this->uri->segment(1); $methodName = $this->uri->segment(2); //獲取該用戶所擁有的控制器和方法 $sql = 'select d.control_name,e.method_name from authority_user_role as a, authority_role as b, authority_role_controlmethod as c, authority_control as d, authority_method as e where a.user_id={$manage_user_id} and a.role_id=b.id and b.id=c.role_id and c.control_id=d.id and c.method_id=e.id;'; $authorityData = $this->db->query($sql)->result_array(); //判斷有沒有權限 $returnData = $this->judgeAuthority($controlName, $methodName, $authorityData); if($returnData['responseCode'] == '101'){ echo '可以訪問,就不die()了'; }($returnData['responseCode'] == '100'){ echo '沒有權限'; die(); } } private function judgeAuthority($controlName, $methodName, $authorityData){ foreach ($authorityData as $k => $v) { if($v['control_name'] == $controlName && $v['method_name'] == $methodName){ $responseData = array('responseCode'=>'101', 'responseMessage'=>'可以訪問'); return $responseData; break; } } $responseData = array('responseCode'=>'100', 'responseMessage'=>'沒有權限'); return $responseData; }
當然了,這個權限管理模塊是在沒參考的情況下完成的,如果有發現不對勁,請幫忙回復指出。