使用php实现权限管理模块 - sustudy

时间:2024-02-20 14:46:20

使用php实现权限管理模块

 

在说权限管理模块前,应该先知道权限管理模块要有哪些功能:

  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 }

 

当然了,这个权限管理模块是在没参考的情况下完成的,如果有发现不对劲,请帮忙回复指出。

 

权限管理模块的demohttp://pan.baidu.com/s/1slyzXsp