• php实现人员权限管理(管理员页面)


    控制人员权限用的最多的应该是OA办公自动化系统和像ERP,CRM,CMS这样的管理系统,就是通过控制用户的权限来控制其拥有的角色和功能,比如管理员可以拥有所有权限和功能,前台只能拥有登记和通报信息等。

    一般标准的权限管理都会有5张数据表来控制,形成一个W型的连接关系,如下

    看看表的结构

    1.用户表 2.用户角色对应表 3.角色表 4.角色功能对应表 5.功能表

             

    首先我们来做一个管理员的页面,这个页面能显示所有用户,并且能看到他们对应的角色,这里我们还能修改他们的角色,先看看效果

     一步步来,先写出来选择用户的功能,当然,显示的用户都是从用户表里加载过来的

     1 请选择用户:
     2   <select id="sel">
     3       <option>请选择</option>
     4     <?php
     5     require "../DataBase.class.php";
     6     $db=new DataBase();
     7     $sql="select * from users";
     8     $arr=$db->Query($sql);
     9     foreach($arr as $v){
    10         echo "<option value='{$v[0]}'>{$v[2]}</option>";
    11         
    12         }
    13     ?>
    14   </select>

    再把角色的复选框写出来 ,附带那个保存按钮也写出来吧

    请选择角色:
        <?php
        $sql2="select * from juese";
        $arr2=$db->Query($sql2);
        foreach($arr2 as $k){
            
            echo "<input type='checkbox' class='ck' value='{$k[0]}'>$k[1]";
            
            }
        ?>
    
    
    
    <div><input type="button" id="save"  value="保存"/></div>

    界面写完了,下面实现功能代码

    功能1.选择相应用户,默认显示他对应的角色(复选框的默认选中)

    用jquery的函数实现(页面开头先引入Jquery)

     1 $("#sel").change(function (){
     2         var uid=$("#sel").val();       //取到下拉选择的用户
     3         $.ajax({                        //调用ajax
     4                 url:"chuli.php",
     5                 data:{uid:uid},
     6                 type:"POST",
     7                 dataType:"TEXT",
     8                 success: function(data){
     9                         var js=data.trim().split("|");    //返回的字符串只有行,进行拆分和去空格,然后得到的是角色数组
    10                         var ck=$(".ck");                //获取所有复选框的值,交给了一个ck数组
    11                         ck.prop("checked",false);        //先清空上次选择用户时留下的复选内容
    12                         for(var i=0;i<ck.length;i++)    //遍历判断
    13                         {
    14                             var v=ck.eq(i).val();        //v代表的是每个复选框的值
    15                             if(js.indexOf(v)>=0){        //判断一下,返回的角色表中的数据是否存在,用的 indexOf方法,如果不存在则返回-1
    16                                 ck.eq(i).prop("checked",true);  //将数据库存在的角色对应的属性设置为选中
    17                                 
    18                                 }
    19                             }
    20                     
    21                     
    22                     
    23                     }
    24             })
    25     
    26 });

    下面是处理页面chuli.php

     1 <?php
     2 $uid=$_POST["uid"];
     3 require "../DataBase.class.php";
     4 $db=new DataBase();
     5 $sql="select jueseid from userinjuese where userid='{$uid}'";
     6 echo $db->StrQuery($sql);
     7 
     8 
     9 
    10 ?>

    如果看不明白的话,看看这个返回字符串的类怎么写的

     1 <?php
     2 class DataBase
     3 {
     4     public $host="localhost";
     5     public $uid = "root";
     6     public $pwd = "";
     7     public $dbname = "mydb";
     8     
     9     //成员方法
    10     public function Query($sql,$type=1)
    11     {
    12         $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);
    13         $r = $db->query($sql);
    14         
    15         if($type==1)
    16         {
    17             return $r->fetch_all();
    18         }
    19         else
    20         {
    21             return $r;
    22         }
    23     }
    24     
    25     //返回字符串的方法
    26     public function StrQuery($sql,$type=1)
    27     {
    28         $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);
    29         $r = $db->query($sql);
    30         
    31         if($type==1)
    32         {
    33             $attr = $r->fetch_all();
    34             $str = "";
    35             foreach($attr as $v)
    36             {
    37                 $str .= implode("^",$v)."|";
    38             }
    39             
    40             return substr($str,0,strlen($str)-1);
    41            }
    42         
    43         else
    44         {
    45             return $r;
    46         }
    47     }
    48     
    49     //返回JSON
    50     public function jsonquery($sql,$type=1)
    51     {
    52         $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);
    53         $r = $db->query($sql);
    54         
    55         if($type==1)
    56         {
    57             return json_encode($r->fetch_all(MYSQLI_ASSOC));
    58         }
    59         else
    60         {
    61             return $r;
    62         }
    63     }
    64 }

    功能2.修改用户对应的角色,并且保存

     1 $("#save").click(function (){        //'保存'按钮的点击事件
     2         var uid=$("#sel").val();    //获取下拉选择的用户
     3         var str="";
     4         var ck=$(".ck");            //获取所有复选框的值,放到ck数组
     5         for(var i=0;i<ck.length;i++)
     6         {
     7             if(ck.eq(i).prop("checked"))   //判断,如果复选框的值为选中
     8             {
     9                 str+=ck.eq(i).val()+",";  //将选中的复选框值用“,”拼接起来交给str
    10                 
    11                 }
    12             
    13             
    14             
    15             }
    16         str=str.substr(0,str.length-1);  //截取一下str,因为最后尾部会多余一个符号
    17         $.ajax({                            
    18             url:"save.php",
    19             data:{uid:uid,js:str},          //将用户和拼接好的已选择复选内容交给处理页面
    20             dataType:"TEXT",
    21             type:"POST",
    22             success: function(data){
    23                 
    24                 alert("保存成功")
    25                 
    26                 }
    27             
    28             
    29             
    30             
    31             
    32             })
    33     
    34     
    35     
    36     
    37     })

    处理页面

     1 <?php
     2 $uid=$_POST["uid"];      //获取到了传递的用户
     3 $js=$_POST["js"];        //获取到了传递过来的已选择的复选框内容
     4 require "../DataBase.class.php";
     5 $db=new DataBase();
     6 $sql="delete from  userinjuese where userid='{$uid}'"; //先把数据库中原来用户的角色清空,不然修改起来会麻烦
     7 $db->Query($sql,0);
     8 $vv=explode(",",$js);        //将复选框内容拆分,因为传来的是一个,隔开的长字符串,得到的vv是一个数组
     9 foreach($vv as $v){         //遍历这个数组
    10 $sql2="insert into userinjuese values('','{$uid}','{$v}')"; //依次写入数据库
    11     $db->Query($sql2,0);
    12 
    13 }
    14 
    15 
    16 ?>

    功能完成了。结束

  • 相关阅读:
    [刷题] PTA 7-32 说反话-加强版
    [算法] 堆
    [笔记] 《c++ primer》显示器程序 Chapter7
    [笔记] 《c++ primer》书店程序 Chapter7
    [c++] <vector>
    [笔记] 《c++ primer》书店程序 Chapter2
    [笔记] 《c++ primer》书店程序 Chapter 1
    253. Meeting Rooms II
    461. Hamming Distance
    252. Meeting Rooms
  • 原文地址:https://www.cnblogs.com/du892294464/p/6901175.html
Copyright © 2020-2023  润新知