在說權限管理前,應該先知道權限管理要有哪些功能:
(1)、使用者只能訪問,指定的控制器,指定的方法
(2)、使用者可以存在於多個使用者群組裡
# (3)、使用者群組可以選擇,指定的控制器,指定的方法
(4)、可以新增控制器和方法
RBAC(Role-Based Access Control,基於角色的存取控制),就是使用者透過角色與權限進行關聯。 ,角色與權限之間,一般者是多對多的關係。設計
寫五張表,首先:使用者表、角色表、功能表:
連接表的表..再來就是角色功能表與使用者角色表:
2.管理員的管理頁面,
(1).分別顯示使用者名稱和角色名稱
(2).根據下拉用戶名的變化,更改對應複選框中的角色
(3).修改用戶角色時,先要把用戶對應角色表,這個用戶所有的資訊刪除,再把取到的使用者名稱和角色代號新加入。<select id="user">
<?php include ("../db.class.php"); $db = new db(); $sql = "select * from qxyh"; $arr = $db->Query($sql); foreach ($arr as $v) { echo "<option value='{$v[0]}'>{$v[2]}</option>"; } ?>
</select>
<p> 请选择角色 <?php $sjs = "select * from qxzw"; $ajs = $db->Query($sjs); foreach ($ajs as $v) { echo "<input type='checkbox' value='{$v[0]}' class='ck'/>{$v[1]} "; } ?> </p> <input type="button" value="确定" id="btn"/>
圖:
#當用戶發生變化的時候,對應的角色也相應變化,並且改變人員的角色信息,添加保存,添加保存的基本思路是先把數據庫里人員對應的角色資訊全部刪除,然後再取到選取的部分,加入資料庫。 ##
<script> //选中默认角色 function xuan() { var uid = $("#user").val(); $.ajax({ url:"chuli.php", data:{uid:uid,type:0}, type:"POST", dataType:"TEXT", success:function(data) { var juese = data.trim().split("|"); //拆分完全都变成代号 var ck = $(".ck"); ck.prop("checked",false); for(var i=0;i<ck.length;i++) { //便利所有的列表 if(juese.indexOf(ck.eq(i).val())>=0) { ck.eq(i).prop("checked",true); } } } }); } </script>
<?php include ("../db.class.php"); $db = new db(); $type = $_POST["type"]; switch ($type) { case 0: $uid = $_POST["uid"]; $sql = "select jid from qxyhzw WHERE uid='{$uid}'"; echo $db->strQuery($sql); break; }
我們看下最後結果,登入成功就會進入主頁,登入失敗會提示錯誤
再來,儲存按鈕:
<script> //当用户变化的时候去选中相应角色 $("#user").change(function(){ xuan(); }) //点击确定保存角色信息 $("#btn").click(function(){ var uid = $("#user").val(); //找到用户名 var juese = ""; // 找到角色代号 var ck = $(".ck"); //找到所有的checked for(var i=0;i<ck.length;i++) { // 遍历他 if(ck.eq(i).prop("checked")) { // 如果他选中了,两个参数是改他的状态 //娶过来值;加个|分割一下 juese += ck.eq(i).val()+"|"; } } juese = juese.substr(0,juese.length-1); // 去掉最后的| $.ajax({ url:"chuli.php", data:{uid:uid,juese:juese,type:1}, type:"POST", dataType:"TEXT", success:function(data){ alert("修改成功"); } }); }) }); </script>
處理頁面:
<?php include ("../db.class.php"); $db = new db(); $type = $_POST["type"]; switch ($type) { case 1: $uid = $_POST["uid"]; $juese = $_POST["juese"]; // 首先全部删掉里面的职位 $sdel = "delete from qxyhzw WHERE uid = '{$uid}'"; $db->Query($sdel,0); //拆分取到的字符串 $arr= explode("|",$juese); foreach ($arr as $v) { $sql = "insert into qxyhzw VALUES ('','{$uid}','{$v}')"; $db->query($sql,0); } echo "ok"; break; }
預設選取角色;
更改以後選擇儲存:
##管理頁面總程式碼:# 请选择用户
<select id="user">
Query($sql);
foreach ($arr as $v)
{
echo "";
}
?>
</select>
用户与角色管理
處理頁面總程式碼:
<?php
include ("../db.class.php");
$db = new db();
$type = $_POST["type"];
switch ($type)
{
case 0:
$uid = $_POST["zhang"];
$sql = "select jid from qxyhzw WHERE uid='{$uid}'";
echo $db->strQuery($sql);
break;
case 1:
$uid = $_POST["zhang"];
$juese = $_POST["juese"];
// 首先全部删掉里面的职位
$sdel = "delete from qxyhzw WHERE uid = '{$uid}'";
$db->Query($sdel,0);
//拆分取到的字符串
$arr= explode("|",$juese);
foreach ($arr as $v)
{
$sql = "insert into qxyhzw VALUES ('','{$uid}','{$v}')";
$db->query($sql,0);
}
echo "ok";
break;
}
#3.登入頁面:
顯示很簡單:<form action="drcl.php" method="post">
<p>帐号:<input type="text" name="zhang"/></p>
<p>密码:<input type="text" name="mi"/></p>
<input type="submit" value="登入"/></form>
#寫入登錄處理
跳转到主页面,主页面代码: 每个人的主页面都是不一样的<?php
session_start();
include ("../db.class.php");
$db = new db();
$zhang = $_POST["zhang"];
$mi = $_POST["mi"];
$sql = "select mi from qxyh WHERE zhang = '{$zhang}'";
$mm = $db->strQuery($sql)>0;
if($mm = $mi && !empty($mi))
{
$_SESSION["zhang"] = $zhang;
header("location:chaxun.php");
}
//else
//{
// echo "登入失败";
//}
<body>
<h1>主页面</h1>
<?php
session_start();
include ("../db.class.php");
$db = new db();
$zhang = "";
if(empty($_SESSION["zhang"]))
{
header("location:qx_dr.php");
exit;
}
//登入者用户名
$zhang = $_SESSION["zhang"];
//根据用户名查角色
$sql = "select jid from qxyhzw WHERE uid = '{$zhang}'";
$aql = $db->Query($sql);
//根据角色代号查功能代号
$attr = array();
//定义一个存放功能代号的数组
foreach ($aql as $v)
{
$jsid = $v[0];// 角色代号
$ssql = "select rid from qxgnzw WHERE jid='{$jsid}'";
$aaql = $db->strQuery($ssql);
//拆分
$adai = explode("|",$aaql);
foreach ($adai as $h)
{
array_push($attr,$h);
}
}
$attr = array_unique($attr);
//去重
//显示
foreach ($attr as $k)
{
$ql = "select * from qxgn WHERE code = '{$k}'";
$arr = $db->Query($ql);
$arr[0][0];
$arr[0][1];
echo "<p code='{$arr[0][0]}'>{$arr[0][1]}</p>";
}
?>
</body>
用php的用户体验不好,最好还是得用ajax
以上是詳解php人員權限管理(RBAC)的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!