在说权限管理模块前,应该先知道权限管理模块要有哪些功能:
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 e 14 where 15 a.user_id={$manage_user_id} and 16 a.role_id=b.id and 17 b.id=c.role_id and 18 c.control_id=d.id and 19 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 }
当然了,这个权限管理模块是在没参考的情况下完成的,如果有发现不对劲,请帮忙回复指出。
权限管理模块的demo:http://pan.baidu.com/s/1slyzXsp