当前位置:Gxlcms > PHP教程 > php人员权限管理(RBAC)

php人员权限管理(RBAC)

时间:2021-07-01 10:21:17 帮助过:32人阅读

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

  (1)、用户只能访问,指定的控制器,指定的方法

  (2)、用户可以存在于多个用户组里

  (3)、用户组可以选择,指定的控制器,指定的方法

  (4)、可以添加控制器和方法

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。

1.数据库的设计

写五张表,首先:用户表、角色表、功能表:

连接表的表..再来就是角色功能表与用户角色表:

2.管理员的管理页面,

  1. <?php
  2. include ("../db.class.php");
  3. $db = new db();
  4. $sql = "select * from qxyh";
  5. $arr = $db->Query($sql);
  6. foreach ($arr as $v)
  7. {
  8. echo "<option value='{$v[0]}'>{$v[2]}</option>";
  9. }
  10. ?>

(1).分别显示用户名和角色名

(2).根据下拉用户名的变化,更改相应复选框中的角色

(3).修改用户角色时,先要把用户对应角色表,这个用户所有的信息删除,再把取到的用户名和角色代号新添加。

利用下拉列表:嵌入php查询并遍历出来,以下拉列表的方式显示出来

选择角色,用多选框:


  1. <p style="margin-bottom: 7px;"><p>请选择角色<br><?php<br>$sjs = "select * from qxzw";<br>$ajs = $db->Query($sjs);<br>foreach ($ajs as $v){ <br> echo "<input type='checkbox' value='{$v[0]}' class='ck'/>{$v[1]} ";<br>}?><br></p><br><input type="button" value="确定" id="btn"/><br></p>

图:

当用户发生变化的时候,相应的角色也相应变化,并且改变人员的角色信息,添加保存,添加保存的基本思路是先把数据库里人员对应的角色信息全部删除,然后再取到选中的部分,添加到数据库。

先来让他选中默认角色:

  1. <script>
  2. //选中默认角色
  3. function xuan()
  4. {
  5. var uid = $("#user").val();
  6. $.ajax({
  7. url:"chuli.php",
  8. data:{uid:uid,type:0},
  9. type:"POST",
  10. dataType:"TEXT",
  11. success:function(data)
  12. {
  13. var juese = data.trim().split("|");
  14. //拆分完全都变成代号
  15. var ck = $(".ck");
  16. ck.prop("checked",false);
  17. for(var i=0;i<ck.length;i++)
  18. {
  19. //便利所有的列表
  20. if(juese.indexOf(ck.eq(i).val())>=0)
  21. {
  22. ck.eq(i).prop("checked",true);
  23. }
  24. }
  25. }
  26. });
  27. }
  28. </script>

来写他的处理页面:

  1. <?php
  2. include ("../db.class.php");
  3. $db = new db();
  4. $type = $_POST["type"];
  5. switch ($type)
  6. {
  7. case 0:
  8. $uid = $_POST["uid"];
  9. $sql = "select jid from qxyhzw WHERE uid='{$uid}'";
  10. echo $db->strQuery($sql);
  11. break;
  12. }

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

再来,保存按钮:

  1. <script>//当用户变化的时候去选中相应角色
  2. $("#user").change(function(){
  3. xuan();
  4. }) //点击确定保存角色信息
  5. $("#btn").click(function(){ var uid = $("#user").val(); //找到用户名
  6. var juese = "";// 找到角色代号
  7. var ck = $(".ck"); //找到所有的checked
  8. for(var i=0;i<ck.length;i++)
  9. {// 遍历他
  10. if(ck.eq(i).prop("checked"))
  11. {// 如果他选中了,两个参数是改他的状态
  12. //娶过来值;加个|分割一下
  13. juese += ck.eq(i).val()+"|";
  14. }
  15. }
  16. juese = juese.substr(0,juese.length-1);// 去掉最后的| $.ajax({
  17. url:"chuli.php",
  18. data:{uid:uid,juese:juese,type:1},
  19. type:"POST",
  20. dataType:"TEXT",
  21. success:function(data){
  22. alert("修改成功");
  23. }
  24. });
  25. })
  26. });</script>

处理页面:

  1. <?php
  2. include ("../db.class.php");
  3. $db = new db();
  4. $type = $_POST["type"];
  5. switch ($type)
  6. {
  7. case 1:
  8. $uid = $_POST["uid"];
  9. $juese = $_POST["juese"];
  10. // 首先全部删掉里面的职位
  11. $sdel = "delete from qxyhzw WHERE uid = '{$uid}'";
  12. $db->Query($sdel,0);
  13. //拆分取到的字符串
  14. $arr= explode("|",$juese);
  15. foreach ($arr as $v)
  16. {
  17. $sql = "insert into qxyhzw VALUES ('','{$uid}','{$v}')";
  18. $db->query($sql,0);
  19. }
  20. echo "ok";
  21. break;
  22. }

看效果:

默认选中角色;

更改以后选择保存:

管理页面总代码:

  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. <title>无标题文档</title>
  5. <script src="../jquery-1.11.2.min.js"></script>
  6. </head>
  7. <body>
  8. <h1>用户与角色管理</h1>
  9. <!--显示所有用户-->
  10. <div>请选择用户
  11. <select id="user">
  12. <?php
  13. include ("../db.class.php");
  14. $db = new db();
  15. $sql = "select * from qxyh";
  16. $arr = $db->Query($sql);
  17. foreach ($arr as $v)
  18. {
  19. echo "<option value='{$v[0]}'>{$v[2]}</option>";
  20. }
  21. ?>
  22. </select>
  23. </div>
  24. <div>
  25. 请选择角色
  26. <?php
  27. $sjs = "select * from qxzw";
  28. $ajs = $db->Query($sjs);
  29. foreach ($ajs as $v)
  30. {
  31. echo "<input type='checkbox' value='{$v[0]}' class='ck'/>{$v[1]} ";
  32. }
  33. ?>
  34. </div>
  35. <input type="button" value="确定" id="btn"/>
  36. </body>
  37. </html>
  38. <script type="text/javascript">
  39. $(document).ready(function(e){
  40. xuan();
  41. //当用户变化的时候去选中相应角色
  42. $("#user").change(function(){
  43. xuan();
  44. })
  45. //点击确定保存角色信息
  46. $("#btn").click(function(){
  47. var uid = $("#user").val();
  48. //找到用户名
  49. var juese = "";
  50. // 找到角色代号
  51. var ck = $(".ck");
  52. //找到所有的checked
  53. for(var i=0;i<ck.length;i++)
  54. {
  55. // 遍历他
  56. if(ck.eq(i).prop("checked"))
  57. {
  58. // 如果他选中了,两个参数是改他的状态
  59. //娶过来值;加个|分割一下
  60. juese += ck.eq(i).val()+"|";
  61. }
  62. }
  63. juese = juese.substr(0,juese.length-1);
  64. // 去掉最后的|
  65. $.ajax({
  66. url:"chuli.php",
  67. data:{uid:uid,juese:juese,type:1},
  68. type:"POST",
  69. dataType:"TEXT",
  70. success:function(data){
  71. alert("修改成功");
  72. }
  73. });
  74. })
  75. });
  76. //选中默认角色
  77. function xuan()
  78. {
  79. var uid = $("#user").val();
  80. $.ajax({
  81. url:"chuli.php",
  82. data:{uid:uid,type:0},
  83. type:"POST",
  84. dataType:"TEXT",
  85. success:function(data)
  86. {
  87. var juese = data.trim().split("|");
  88. //拆分完全都变成代号
  89. var ck = $(".ck");
  90. ck.prop("checked",false);
  91. for(var i=0;i<ck.length;i++)
  92. {
  93. //便利所有的列表
  94. if(juese.indexOf(ck.eq(i).val())>=0)
  95. {
  96. ck.eq(i).prop("checked",true);
  97. }
  98. }
  99. }
  100. });
  101. }
  102. </script>

处理页面总代码:

  1. <?php
  2. include ("../db.class.php");
  3. $db = new db();
  4. $type = $_POST["type"];
  5. switch ($type)
  6. {
  7. case 0:
  8. $uid = $_POST["zhang"];
  9. $sql = "select jid from qxyhzw WHERE uid='{$uid}'";
  10. echo $db->strQuery($sql);
  11. break;
  12. case 1:
  13. $uid = $_POST["zhang"];
  14. $juese = $_POST["juese"];
  15. // 首先全部删掉里面的职位
  16. $sdel = "delete from qxyhzw WHERE uid = '{$uid}'";
  17. $db->Query($sdel,0);
  18. //拆分取到的字符串
  19. $arr= explode("|",$juese);
  20. foreach ($arr as $v)
  21. {
  22. $sql = "insert into qxyhzw VALUES ('','{$uid}','{$v}')";
  23. $db->query($sql,0);
  24. }
  25. echo "ok";
  26. break;
  27. }

3.登入页面:

显示很简单:

  1. <form action="drcl.php" method="post">
  2. <p>帐号:<input type="text" name="zhang"/></p>
  3. <p>密码:<input type="text" name="mi"/></p>
  4. <input type="submit" value="登入"/></form>

写登入处理

  1. <?php
  2. session_start();
  3. include ("../db.class.php");
  4. $db = new db();
  5. $zhang = $_POST["zhang"];
  6. $mi = $_POST["mi"];
  7. $sql = "select mi from qxyh WHERE zhang = '{$zhang}'";$mm = $db->strQuery($sql)>0;
  8. if($mm = $mi && !empty($mi)){
  9. $_SESSION["zhang"] = $zhang;
  10. header("location:chaxun.php");
  11. }//else
  12. //{
  13. // echo "登入失败";
  14. //}

跳转到主页面,主页面代码:

每个人的主页面都是不一样的

  1. <body><h1>主页面</h1>
  1. <?php
  2. session_start();
  3. include ("../db.class.php");
  4. $db = new db();$zhang = "";
  5. if(empty($_SESSION["zhang"]))
  6. {
  7. header("location:qx_dr.php"); exit;
  8. }//登入者用户名
  9. $zhang = $_SESSION["zhang"];//根据用户名查角色$sql = "select jid from qxyhzw WHERE uid = '{$zhang}'";$aql = $db->Query($sql);//根据角色代号查功能代号$attr = array();//定义一个存放功能代号的数组foreach ($aql as $v)
  10. { $jsid = $v[0];// 角色代号
  11. $ssql = "select rid from qxgnzw WHERE jid='{$jsid}'"; $aaql = $db->strQuery($ssql);//拆分
  12. $adai = explode("|",$aaql); foreach ($adai as $h)
  13. { array_push($attr,$h);
  14. }
  15. }$attr = array_unique($attr);//去重
  16. //显示foreach ($attr as $k)
  17. { $ql = "select * from qxgn WHERE code = '{$k}'";
  18. $arr = $db->Query($ql); arr[0][0]; $arr[0][1]; echo "<p code='{$arr[0][0]}'>{$arr[0][1]}</p>";
  19. }?>
  1. </body>

用php的用户体验不好,最好还是得用ajax

以上就是php人员权限管理(RBAC) 的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行