php注解rbac,PHP的RBAC权限详解
本文主要和大家分享PHP的RBAC權(quán)限詳解,希望能幫助到大家,首先我們應(yīng)該先知道權(quán)限管理要有哪些功能:
(1)、用戶只能訪問(wèn),指定的控制器,指定的方法
(2)、用戶可以存在于多個(gè)用戶組里
(3)、用戶組可以選擇,指定的控制器,指定的方法
(4)、可以添加控制器和方法
RBAC(Role-Based Access Control,基于角色的訪問(wèn)控制),就是用戶通過(guò)角色與權(quán)限進(jìn)行關(guān)聯(lián)。簡(jiǎn)單地說(shuō),一個(gè)用戶擁有若干角色,每一個(gè)角色擁有若干權(quán)限。這樣,就構(gòu)造成“用戶-角色-權(quán)限”的授權(quán)模型。在這種模型中,用戶與角色之間,角色與權(quán)限之間,一般者是多對(duì)多的關(guān)系。
1.數(shù)據(jù)庫(kù)的設(shè)計(jì)
寫(xiě)五張表,首先:用戶表、角色表、功能表:
連接表的表..再來(lái)就是角色功能表與用戶角色表:
2.管理員的管理頁(yè)面,
(1).分別顯示用戶名和角色名
(2).根據(jù)下拉用戶名的變化,更改相應(yīng)復(fù)選框中的角色
(3).修改用戶角色時(shí),先要把用戶對(duì)應(yīng)角色表,這個(gè)用戶所有的信息刪除,再把取到的用戶名和角色代號(hào)新添加。
利用下拉列表:嵌入php查詢并遍歷出來(lái),以下拉列表的方式顯示出來(lái)
<?php include ("../db.class.php"); $db = new db(); $sql = "select * from qxyh"; $arr = $db->Query($sql); foreach ($arr as $v)
{ echo "{$v[2]}";
} ?>
選擇角色,用多選框:
請(qǐng)選擇角色<?php $sjs = "select * from qxzw";$ajs = $db->Query($sjs);foreach ($ajs as $v)
{ echo "{$v[1]} ";
}?>
圖:
當(dāng)用戶發(fā)生變化的時(shí)候,相應(yīng)的角色也相應(yīng)變化,并且改變?nèi)藛T的角色信息,添加保存,添加保存的基本思路是先把數(shù)據(jù)庫(kù)里人員對(duì)應(yīng)的角色信息全部刪除,然后再取到選中的部分,添加到數(shù)據(jù)庫(kù)。
先來(lái)讓他選中默認(rèn)角色:
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("|"); //拆分完全都變成代號(hào)
var ck = $(".ck");
ck.prop("checked",false); for(var i=0;i
{ //便利所有的列表
if(juese.indexOf(ck.eq(i).val())>=0)
{
ck.eq(i).prop("checked",true);
}
}
}
});
}
來(lái)寫(xiě)他的處理頁(yè)面:<?phpinclude ("../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;
}
我們看下最后結(jié)果,登錄成功就會(huì)進(jìn)入主頁(yè),登錄失敗會(huì)提示錯(cuò)誤
再來(lái),保存按鈕:
$("#user").change(function(){
xuan();
}) //點(diǎn)擊確定保存角色信息
$("#btn").click(function(){ var uid = $("#user").val(); //找到用戶名
var juese = "";// 找到角色代號(hào)
var ck = $(".ck"); //找到所有的checked
for(var i=0;i
{// 遍歷他
if(ck.eq(i).prop("checked"))
{// 如果他選中了,兩個(gè)參數(shù)是改他的狀態(tài)
//娶過(guò)來(lái)值;加個(gè)|分割一下
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("修改成功");
}
});
})
});
處理頁(yè)面:<?phpinclude ("../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;
}
看效果:
默認(rèn)選中角色;
更改以后選擇保存:
管理頁(yè)面總代碼:
View Code
處理頁(yè)面總代碼:<?phpinclude ("../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.登入頁(yè)面:
顯示很簡(jiǎn)單:
帳號(hào):
密碼:
寫(xiě)登入處理<?phpsession_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 "登入失敗";
//}
跳轉(zhuǎn)到主頁(yè)面,主頁(yè)面代碼:
每個(gè)人的主頁(yè)面都是不一樣的
主頁(yè)面
<?phpsession_start ();include ("../db.class.php");$db = new db();$zhang = "";if(empty($_SESSION["zhang"])){ header("location:qx_dr.php"); exit;
}//登入者用戶名
$zhang = $_SESSION["zhang"];//根據(jù)用戶名查角色$sql = "select jid from qxyhzw WHERE uid = '{$zhang}'";$aql = $db->Query($sql);//根據(jù)角色代號(hào)查功能代號(hào)$attr = array();//定義一個(gè)存放功能代號(hào)的數(shù)組foreach ($aql as $v)
{ $jsid = $v[0];// 角色代號(hào)
$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 "
{$arr[0][1]}
";}?>
用php的用戶體驗(yàn)不好,最好還是得用ajax。
相關(guān)推薦:
php人員權(quán)限管理(RBAC)
總結(jié)
以上是生活随笔為你收集整理的php注解rbac,PHP的RBAC权限详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 金士顿内存:为何备受瞩目?
- 下一篇: php基础教程文档,PHP5基础教程