在说权限管理模块前,应该先知道权限管理模块要有哪些功能:
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框架):
1 function __construct(){ 2 //假设管理员编号为99 3 $manage_user_id = 99; 4 //获取要访问的控制器和方法 5 $controlName = $this->uri->segment(1); 6 $methodName = $this->uri->segment(2); 7 //获取该用户所拥有的控制器和方法 8 $sql = 'select d.control_name,e.method_name from 9 authority_user_role as a,10 authority_role as b,11 authority_role_controlmethod as c,12 authority_control as d,13 authority_method as e14 where15 a.user_id={$manage_user_id} and16 a.role_id=b.id and17 b.id=c.role_id and18 c.control_id=d.id and19 c.method_id=e.id;';20 $authorityData = $this->db->query($sql)->result_array();21 //判断有没有权限22 $returnData = $this->judgeAuthority($controlName, $methodName, $authorityData);23 if($returnData['responseCode'] == '101'){24 echo '可以访问,就不die()了';25 }($returnData['responseCode'] == '100'){26 echo '没有权限';27 die();28 }29 30 }31 private function judgeAuthority($controlName, $methodName, $authorityData){32 foreach ($authorityData as $k => $v) {33 if($v['control_name'] == $controlName && $v['method_name'] == $methodName){34 $responseData = array('responseCode'=>'101', 'responseMessage'=>'可以访问');35 return $responseData;36 break;37 }38 }39 $responseData = array('responseCode'=>'100', 'responseMessage'=>'没有权限');40 return $responseData;41 }
联系客服