• 使用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

  • 相关阅读:
    go语言入门(三)
    go语言入门(二)
    Nand Flash 基础
    哈希技术
    NorFlash基础
    二阶构造模式
    C++基础知识汇总
    Arm寄存器介绍及汇编基础
    Linux Makefile详解
    Linux链接器脚本详解
  • 原文地址:https://www.cnblogs.com/sustudy/p/5366862.html
Copyright © 2020-2023  润新知