zoukankan      html  css  js  c++  java
  • php之 人员的权限管理

    1.想好权限管理的作用?

    2.有什么权限内容?

    3.既然有权限管理那么就会有管理员?

    4.登录后每个人员的界面会是不一样的?

    一、想好这个权限是什么?

    就做一个就像是vip的功能,普通用户和vip用户的功能是不一样的,先来考虑一下数据库怎么设计

    肯定要有用户表、还有用户所用的角色、然后就是权限功能表;可是在这里面有关联也就 是会另外有两张相互关联的表,这样也就是5张表

    在数据库中建好这五张表:

    (1)用户表、角色表、功能表

         

    (2)主表中的外键关系得两个表:用户与角色表、角色与功能表

        

    二、建好表之后就是开始写代码了,首先是管理员的页面

    注意:这里只写了用户和角色的管理界面,没有写角色和功能的管理页面,但是它们都是一样的,会其一就会其二了

    可以选择用户,然后根据选择复选框来给他们添加说是删除一些功能

    (1)先可以显示出想要的效果:比如用户的选择可以用下拉列表

    1
    2
    3
    <div>请选择用户:
      <select id="uid">   //给这个起个名字,可以在下面的操作中加事件<br>  //这里是遍历数据库中的用户表<br>  </select>
    </div>

    看下效果:

    下拉列表中还没有值,是因为还没有进行数据库操作

    (2)链接数据库操作,遍历出数据库中的用户(遍历数据库前面的随笔中已经写过很多遍了)

    1
    2
    3
    4
    5
    6
    7
    //只是遍历数据库就可以,不用传值的话,就不用写传值数据和传值方式了<br>$.ajax({
        url:"admain_cl.php"//用户的处理界面
        dataType:"TEXT",   //返回的数据类型
        success: function(data){<br>         //处理页面执行成功后将要执行的代码处
                }  
        })
    });       

    (3)用户的处理界面

    1
    2
    3
    4
    5
    6
    7
    <?php
    include("DBDA.class.php");  //调用封装好的数据库类
    $db = new DBDA();  //造新对象
     
    $sql = "select * from users"//查询语句,查询用户表中的所有信息
    echo $db->StrQuery($sql);  //执行封装类中的字符串转换方法
    ?>

    封装类中的字符串转化方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
    class DBDA
    {
        public $host="localhost";   //使用的什么连接,这里是本地连接方式
        public $uid="root"//数据库用户
        public $password="511108";   //用户的密码
        public $dbname="test"//使用的数据库名
         
        //返回字符串的方法
        public function StrQuery($sql,$type=1)
        {
            $db = new MySQLi($this->host,$this->uid,$this->password,$this->dbname);
            $r = $db->query($sql);  //执行查询语句
                 
            if($type==1)
            {
            $attr = $r->fetch_all();
            $str = "";
            foreach($attr as $v)
            {
                $str .= implode("^",$v)."|"//拼接数组为字符串
            }  
            return substr($str,0,strlen($str)-1);  //截取字符串:最后的拼接符不显示
            }
            else
            {
            return $r;
            }
    }
    ?>  

    (4)处理页面写好了之后,就可以写主页面中,执行处理页面成功后的代码了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    success: function(data){
        var hang = data.split("|");  //分割行
        var str = "";
        for(var i=0;i<hang.length;i++)  //循环
        {
            var lie = hang[i].split("^");  //分割列
            str +="<option value='"+lie[0]+"'>"+lie[2]+"</option>"; //拼接下拉列表项:想要显示的是用户名,所以表中索引是2代表了name,给这个项的值是代号,下面将会用到
        }
        $("#uid").html(str);  //将值写入下拉列表中
    }  

    经过这4步后看下结果:数据库中用户表中的数据就可以遍历出来了

    (5)用户写好之后,就是角色了,可以使用复选框的方式显示,这里还是可以用ajax,和上面一样的方法,不多说直接上代码

    还是先要写个div放这个复选框

    1
    2
    3
    4
    5
    <div>请选择角色:
        <div id="juese">
             //遍历放值的地方  
        </div>
    </div>

    然后就是遍历数据库了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $.ajax({
        url:"admain_cl1.php",   //功能的处理页面
        dataType:"TEXT",   //返回的数据类型
        success: function(d){
            var hang = d.split("|");  //拆分行
            var str = "";
            for(var i=0;i<hang.length;i++)
            {
              var lie = hang[i].split("^");  //拆分列
              str+="<input class='ck' type='checkbox' value='"+lie[0]+"' />"+lie[1];  //显示的复选框,索引1就是数据库中的name列
            }
            $("#juese").html(str);  //将值写入div中
        }
    });

    角色的处理页面的代码

    1
    2
    3
    4
    5
    6
    7
    <?php
    include("DBDA.class.php");  //调用封装好的数据库类
    $db = new DBDA();  //造新对象
     
    $sql = "select * from juese"//查询语句,查询角色表中的所有信息
    echo $db->StrQuery($sql);  //执行封装类中的字符串转换方法
    ?>

    写完之后就是运行查看下有没有错误

    (6)修改完成后就是要保存了,在页面中写一个保存按钮

    1
    <input type="button" value="保存" id="save" />  //给这个按钮起个名字,因为要有点击事件

    至此,页面的显示都可以完成了

     

    (7)这样,在就是怎么让数据库中用户本有的角色显示出来,那就是要用到下拉列表和复选框的值了

    可以把他写入方法里,然后调用这个方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function Xuan()
    {
      var uid = $("#uid").val();  //找到下拉类表的值
      $.ajax({
        url:"admain_cl2.php"//项的处理页面
        data:{uid:uid},
        type:"POST",
        dataType:"TEXT",
        success: function(b){
          var hang = b.split("|");  //分割行
          var ck = $(".ck");  //找到复选项的值
                     
          ck.prop("checked",false);  //清理选中
                         
          for(var i=0;i<ck.length;i++)
          {
            var zhi = ck.eq(i).val();  //取出选项的值
            if(hang.indexOf(zhi)>=0) 
            {
              ck.eq(i).prop("checked",true);  //是的话就让这一项的值选中
            }
          }
        }
      })
    }  

    (8)项值的处理页面

    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    include("DBDA.class.php");  //调用封装好的数据库类
    $db = new DBDA();  //造新对象
     
    $uid = $_POST["uid"];  //传过来的值
    $sql = "select jueseid from userinjuese where userid='{$uid}'"//传过来的值和表中的用户值相等
    echo $db->StrQuery($sql);  //执行封装类中的字符串转换方法
    ?>

    这样,每个用户的默认角色就选中了

    (9)最后就是保存修改后的值了

    可以直接用全部删除在重新写入的方法来进行值的选择;对保存按钮添加单击事件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $("#save").click(function(){
        var uid = $("#uid").val();  //找到用户的值
        var ck = $(".ck");  //选项的值
        var str = "";
        for(var i=0;i<ck.length;i++)
        {
        if(ck.eq(i).prop("checked"))  //选项的选中状态
            {
            str = str+ck.eq(i).val()+"|";
        }
        }
        str = str.substr(0,str.length-1);  //截取字符串
                 
        $.ajax({
        url:"admain_cl3.php"//保存的处理页面
        data:{uid:uid,js:str},  //将用户和项的值传过去
        type:"POST"//传值方式
        dataType:"TEXT",
        success: function(data){
          if(data.trim()=="OK")
          {
            alert("保存成功!");  //保存成功后,弹出框
          }
        }
        });    
    })       

    保存的处理页面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    include("DBDA.class.php");  //调用的封装类
    $db = new DBDA();  //造新对象
     
    //传过来的用户和选项的值
    $uid = $_POST["uid"];
    $js = $_POST["js"];
     
    $sdelete = "delete from userinjuese where userid='{$uid}'"//全部删除将用户代号和用户相等的
    $db->Query($sdelete,0);  //执行语句
     
    $attr = explode("|",$js); 
     
    foreach($attr as $v)
    {
        $sql = "insert into userinjuese values('','{$uid}','{$v}')";   //修改表中的值
        $db->Query($sql,0);  //执行语句
    }
     
    echo "OK";

    这个管理员的页面到这也就结束了,整体的看下结果:

    1.默认还没有进行修改的这个用户

    2.进行修改之后的这个用户,单击保存后弹出保存成功对话框

       

    二、管理员页面弄好之后,就是登陆页面了,用户的登录页面很简单,不多说了,直接上代码

    (1)登录的基本显示:都是些基本语句

    1
    2
    3
    4
    <h1>用户登录</h1>
    <div>账号:<input type="text" id="uid" /></div> 
    <div>密码:<input type="password" id="pwd" /></div>
    <div><input type="button" value="登录" id="btn" /></div>

    (2)这里登录,我们也用ajax进行登录吧

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $("#btn").click(function(){  //对登录按钮添加单击事件
      var uid=$("#uid").val();  //获取用户的值
      var pwd=$("#pwd").val();  //获取密码的值
      $.ajax({
        url:"logincl.php"//编写登录的处理页面
        data:{uid:uid,pwd:pwd},  //将用户和密码传到处理页面
        type:"POST",
        dataType:"text",
        success: function(data)
        {
          if(data.trim()=="OK")
          {
            window.location.href="main.php";    //处理页面执行成功后,跳转到主页面
          }
          else
          {
            alert("用户名密码输入错误");  //否则就提示错误
          }
        }
      })       
    })

    (3)看下处理页面的编写

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    session_start();  //开启session
    include("DBDA.class.php");  //调用封装的类
    $db = new DBDA();  //造新对象
    //传过来的值
    $uid = $_POST["uid"];
    $pwd = $_POST["pwd"];<br>//查询语句
    $sql = " select pwd from users where uid='{$uid}' and pwd='{$pwd}' ";
    //执行语句
    $attr = $db->Query($sql);
    if(!empty($pwd) && !empty($attr) && $attr[0][0]==$pwd)
    {
        $_SESSION["uid"] = $uid; //session接收用户值
        echo "OK"
    }
    else
    {
        echo "ON"
    }
    ?>

    最后,我们看下最后结果,登录成功就会进入主页,登录失败会提示错误

       

    三、登录成功的主页面:每个用户的主页面应该是不一样的

    (1)既然后session,那就先将session开启

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    session_start(); //开启session   
    if(empty($_SESSION["uid"]))  //判断session是否为空
    {
      header("location:login.php"); //空的话就返回登录页面           
    }
    else
    {
      echo $_SESSION["uid"];  //否则就输出用户名
    }
    ?>

    (2)我这里是写了个表用来装遍历出来的功能表:可以给这个表加点样式

    1
    2
    3
    <table id="t" width="7%"  cellpadding="0" cellspacing="0" border="1">
                 
    </table>

    (3)ajax传值了:下面的语句代表什么意思上面用的时候都将了很多遍了,就不重复说明了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $.ajax({
      url:"main_cl.php", //主页面的处理页面
      dataType:"TEXT"
      success: function(data){
        var hang = data.split("|");
        var str = "";
        for(var i=0;i<hang.length;i++)
        {
          var lie = hang[i].split("^");
          str +="<tr><td>"+lie[0]+"</td></tr>"; //因为处理页面中只找了name,所以索引就是0                       
        }
        $("#t").html(str);  //将值写入表中               
      }
    })

    主页面的处理页面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    session_start();  //开启session
    $uid = $_SESSION["uid"];  //接收session传过来的值
    include("DBDA.class.php");
    $db = new DBDA();
    //这个是用到的相关子查询方法
    $sql = "select name from rules where code in (select ruleid from juesewithrules where jueseid in (select code from juese where code in (select jueseid from userinjuese where userid='{$uid}')))";
    //执行语句
    echo $db->StrQuery($sql);
    ?>

    最后就是可以登录显示不一样用户权限功能的页面了,看下整体结果:

    (1)登录一个用户,进入主页

       

    (2)看下这个用户的管理界面是不是有这些功能

        

    下面是数据库中的该用户的信息表:用户和角色的表、角色表、功能表、角色和功能表

            

    不难看出,该用户的登录成功后的主页面显示的是对的

    不同用户登录的页面是不一样的

  • 相关阅读:
    949. Largest Time for Given Digits
    450. Delete Node in a BST
    983. Minimum Cost For Tickets
    16. 3Sum Closest java solutions
    73. Set Matrix Zeroes java solutions
    347. Top K Frequent Elements java solutions
    215. Kth Largest Element in an Array java solutions
    75. Sort Colors java solutions
    38. Count and Say java solutions
    371. Sum of Two Integers java solutions
  • 原文地址:https://www.cnblogs.com/aqxss/p/6706761.html
Copyright © 2011-2022 走看看