当前位置:   article > 正文

PHP-人员权限管理(RBAC)_php实现权限rubc

php实现权限rubc

权限管理可以想做vip的功能,普通用户和vip用户的功能是不一样的,大致会用到五张表:用户表、角色表、功能表,还有他们之间互相关联的表:用户与角色表、角色与功能表

我用到的五张表如下:

                  

             

一.首先写的是管理员页面

1.用下拉列表显示用户名:

  1. <div>
  2.      <select id"user" >
  3.      <?php
  4.      require "../DBDA.class.php" ;
  5.      $db  =  new  DBDA();
  6.      $sql  =  "select * from users" ;
  7.      $arr  =  $db ->query( $sql ,1);
  8.      foreach ( $arr  as  $v )
  9.      {
  10.          echo "<option value='{$v[0]}'>{$v[2]}</option>" ;
  11.      }
  12.      ?>
  13.      </select>
  14. </div>

 

2.因为上面已经造了新对象,所以在显示角色名时直接从SQL语句开始写:

  1. <div>请选择角色:
  2.      <?php
  3.      $sql  =  "select * from juese" ;
  4.      $arr  =  $db ->query( $sql ,1);
  5.      foreach ( $arr  as  $v )
  6.      {
  7.          echo  "<input type='checkbox' class='ck' value='{$v[0]}'/>{$v[1]}" ;
  8.      }
  9.      ?>
  10. </div>
  11. <br/>

 

3.为了修改权限加一个确认保存按钮:

<input type"button"  value"保存"  id"baocun"  />

 

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

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

  1. function  Xuan()
  2. {
  3.      var  uid = $( "#user" ).val();
  4.      $.ajax({
  5.              url"chuli.php" ,
  6.              data:{uid:uid},
  7.              type"POST" ,
  8.              dataType"TEXT" ,
  9.              success:  function (data){
  10.                      var  js = data.trim().split"|" );
  11.                      var  ck = $( ".ck" );
  12.                      ck.prop"checked" ,false);
  13.                      for ( var  i=0;i<ck.length;i++)
  14.                      {
  15.                          var  v = ck.eq(i).val();
  16.                          if (js.indexOf(v)>=0)
  17.                          {
  18.                              ck.eq(i).prop"checked" ,true);
  19.                          }
  20.                      }
  21.                  }
  22.          })
  23. }

 

 5.各项值的处理页面:

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

 

效果如下:

6.最后就是保存修改后的值了,可以直接用全部删除在重新写入的方法来进行值的选择;对保存按钮添加单击事件:

  1. Xuan();
  2. $( "#user" ).changefunction (){
  3.     Xuan();
  4. })
  5. $( "#baocun" ).clickfunction (){
  6.          var  uid = $( "#user" ).val();
  7.          var  str =  "" ;
  8.          var  ck = $( ".ck" );
  9.          for ( var  i=0;i<ck.length;i++)
  10.          {
  11.              if (ck.eq(i).prop"checked" ))
  12.              {
  13.                  str = str + ck.eq(i).val()+ "," ;
  14.              }
  15.          }
  16.      str = str. substr (0,str.length-1);
  17.      $.ajax({
  18.              url"add.php" ,
  19.              data:{uid:uid,js:str},
  20.              type"POST" ,
  21.              dataType"TEXT" ,
  22.              success:  function (data){
  23.                      alert"保存成功!" );
  24.                  }
  25.          })
  26.      })

 

 7.保存的处理页面:

  1. <?php
  2. require  "../DBDA.class.php" ;
  3. $db  =  new  DBDA();
  4. $uid  =  $_POST "uid" ];
  5. $js  =  $_POST "js" ];
  6. // 清空原有角色
  7. $sql  =  "delete from userinjuese where userid='{$uid}'" ;
  8. $db ->query$sql );
  9. // 添加选中的角色
  10. $ajs  =  explode "," , $js );
  11. foreach $ajs  as  $v )
  12. {
  13.      $sql  =  "insert into userinjuese values('','{$uid}','{$v}')" ;
  14.      $db ->query$sql );
  15. }

 

 效果如下:

下面代码用来copy用,注意AJAX需要引用Jquery

1.guanli.php

  1. <!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
  2. <html xmlns"http://www.w3.org/1999/xhtml" >
  3. <head>
  4. <meta http-equiv"Content-Type"  content"text/html; charset=utf-8"  />
  5. <title>无标题文档</title>
  6. <script src"../jquery-3.2.0.min.js" ></script>
  7. </head>
  8. <body>
  9. <h1>用户角色对应</h1>
  10. <div>
  11.      <select id"user" >
  12.      <?php
  13.      require "../DBDA.class.php" ;
  14.      $db  =  new  DBDA();
  15.      $sql  =  "select * from users" ;
  16.      $arr  =  $db ->query( $sql ,1);
  17.      foreach ( $arr  as  $v )
  18.      {
  19.          echo "<option value='{$v[0]}'>{$v[2]}</option>" ;
  20.      }
  21.      ?>
  22.      </select>
  23. </div>
  24. <br/>
  25. <div>请选择角色:
  26.      <?php
  27.      $sql  =  "select * from juese" ;
  28.      $arr  =  $db ->query( $sql ,1);
  29.      foreach ( $arr  as  $v )
  30.      {
  31.          echo  "<input type='checkbox' class='ck' value='{$v[0]}'/>{$v[1]}" ;
  32.      }
  33.      ?>
  34. </div>
  35. <br/>
  36. <input type"button"  value"保存"  id"baocun"  />
  37. </body>
  38. <script type"text/javascript" >
  39. Xuan();
  40. $( "#user" ).changefunction (){
  41.          Xuan();
  42.      })
  43. $( "#baocun" ).clickfunction (){
  44.          var  uid = $( "#user" ).val();
  45.          var  str =  "" ;
  46.          var  ck = $( ".ck" );
  47.          for ( var  i=0;i<ck.length;i++)
  48.          {
  49.              if (ck.eq(i).prop"checked" ))
  50.              {
  51.                  str = str + ck.eq(i).val()+ "," ;
  52.              }
  53.          }
  54.      str = str. substr (0,str.length-1);
  55.      $.ajax({
  56.              url"add.php" ,
  57.              data:{uid:uid,js:str},
  58.              type"POST" ,
  59.              dataType"TEXT" ,
  60.              success:  function (data){
  61.                      alert"保存成功!" );
  62.                  }
  63.          })
  64.      })
  65. function  Xuan()
  66. {
  67.      var  uid = $( "#user" ).val();
  68.      $.ajax({
  69.              url"chuli.php" ,
  70.              data:{uid:uid},
  71.              type"POST" ,
  72.              dataType"TEXT" ,
  73.              success:  function (data){
  74.                      var  js = data.trim().split"|" );
  75.                      var  ck = $( ".ck" );
  76.                      ck.prop"checked" ,false);
  77.                      for ( var  i=0;i<ck.length;i++)
  78.                      {
  79.                          var  v = ck.eq(i).val();
  80.                          if (js.indexOf(v)>=0)
  81.                          {
  82.                              ck.eq(i).prop"checked" ,true);
  83.                          }
  84.                      }
  85.                  }
  86.          })
  87. }
  88. </script>
  89. </html>

 

 2.chuli.php

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

 

 3.保存的处理页面 add.php

  1. <?php
  2. require  "../DBDA.class.php" ;
  3. $db  =  new  DBDA();
  4. $uid  =  $_POST "uid" ];
  5. $js  =  $_POST "js" ];
  6. // 清空原有角色
  7. $sql  =  "delete from userinjuese where userid='{$uid}'" ;
  8. $db ->query$sql );
  9. // 添加选中的角色
  10. $ajs  =  explode "," , $js );
  11. foreach $ajs  as  $v )
  12. {
  13.      $sql  =  "insert into userinjuese values('','{$uid}','{$v}')" ;
  14.      $db ->query$sql );
  15. }

 

二.完成管理员页面后,下面就是登录页面

1.登录基本页面 login.php

  1. <!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
  2. <html xmlns"http://www.w3.org/1999/xhtml" >
  3. <head>
  4. <meta http-equiv"Content-Type"  content"text/html; charset=utf-8"  />
  5. <title>无标题文档</title>
  6. </head>
  7. <body>
  8. <h1>登录界面</h1>
  9. <form action"dlchuli.php"  method"post" >
  10. <div>用户名:<input type"text"  name"uid"  /></div>
  11. <div>密码:   <input type"password"  name"pwd"  /></div>
  12. <input type"submit"  value"登录"  />
  13. </form>
  14. </body>
  15. </html>

 

 2.登录处理的页面 dlchuli.php

  1. <?php
  2. session_start();
  3. require  "../DBDA.class.php" ;
  4. $db  =  new  DBDA();
  5. $uid  =  $_POST "uid" ];
  6. $pwd  =  $_POST "pwd" ];
  7. $sql  =  "select pwd from users where uid='{$uid}'" ;
  8. $mm  =  $db ->strquery$sql );
  9. if $mm == $pwd  && ! empty $pwd ))
  10. {
  11.      $_SESSION "uid" ] =  $uid ;
  12.      header"location:main.php" );
  13. } else {
  14.      echo "输入的用户名或密码有误!" ;
  15. }

 

 

3.主页面 main.php

  1. <!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
  2. <html xmlns"http://www.w3.org/1999/xhtml" >
  3. <head>
  4. <meta http-equiv"Content-Type"  content"text/html; charset=utf-8"  />
  5. <title>无标题文档</title>
  6. <style type"text/css" >
  7. .list {
  8. width:100px;
  9.         height:35px;
  10.         border:1px solid #36F;
  11.         margin:0px 2px 0px 2px;
  12.         text-align:center;
  13.         vertical-align:middle;
  14.         line-height:35px;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <h1>主页面</h1>
  20. <?php
  21. session_start();
  22. $uid  = "" ;
  23. if ( empty ( $_SESSION [ "uid" ]))<code  class = "php comments" > //判断session是否为空</code>
  24. {
  25.      header( "location:login.php" );<code  class = "php comments" > //空的话就返回登录页面</code>
  26.      exit ;
  27. }
  28. $uid  =  $_SESSION [ "uid" ];
  29. require "../DBDA.class.php" ;
  30. $db  =  new  DBDA();
  31. $sql  =  "select * from rules where code in(select distinct ruleid from juesewithrules where jueseid in(select jueseid from userinjuese where userid='{$uid}'))" ;
  32. $arr  =  $db ->query( $sql ,1);
  33. foreach ( $arr  as  $v )
  34. {
  35.      echo  "<div code='{$v[0]}' class='list'>{$v[1]}</div>" ;
  36. }
  37. ?>
  38. </body>
  39. </html>

选择登陆张三显示他的权限,效果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/437020
推荐阅读
相关标签
  

闽ICP备14008679号