php注解rbac,PHP的RBAC权限详解
本文主要和大家分享PHP的RBAC權限詳解,希望能幫助到大家,首先我們應該先知道權限管理要有哪些功能:
(1)、用戶只能訪問,指定的控制器,指定的方法
(2)、用戶可以存在于多個用戶組里
(3)、用戶組可以選擇,指定的控制器,指定的方法
(4)、可以添加控制器和方法
RBAC(Role-Based Access Control,基于角色的訪問控制),就是用戶通過角色與權限進行關聯。簡單地說,一個用戶擁有若干角色,每一個角色擁有若干權限。這樣,就構造成“用戶-角色-權限”的授權模型。在這種模型中,用戶與角色之間,角色與權限之間,一般者是多對多的關系。
1.數據庫的設計
寫五張表,首先:用戶表、角色表、功能表:
連接表的表..再來就是角色功能表與用戶角色表:
2.管理員的管理頁面,
(1).分別顯示用戶名和角色名
(2).根據下拉用戶名的變化,更改相應復選框中的角色
(3).修改用戶角色時,先要把用戶對應角色表,這個用戶所有的信息刪除,再把取到的用戶名和角色代號新添加。
利用下拉列表:嵌入php查詢并遍歷出來,以下拉列表的方式顯示出來
<?php include ("../db.class.php"); $db = new db(); $sql = "select * from qxyh"; $arr = $db->Query($sql); foreach ($arr as $v)
{ echo "{$v[2]}";
} ?>
選擇角色,用多選框:
請選擇角色<?php $sjs = "select * from qxzw";$ajs = $db->Query($sjs);foreach ($ajs as $v)
{ echo "{$v[1]} ";
}?>
圖:
當用戶發生變化的時候,相應的角色也相應變化,并且改變人員的角色信息,添加保存,添加保存的基本思路是先把數據庫里人員對應的角色信息全部刪除,然后再取到選中的部分,添加到數據庫。
先來讓他選中默認角色:
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
{ //便利所有的列表
if(juese.indexOf(ck.eq(i).val())>=0)
{
ck.eq(i).prop("checked",true);
}
}
}
});
}
來寫他的處理頁面:<?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;
}
我們看下最后結果,登錄成功就會進入主頁,登錄失敗會提示錯誤
再來,保存按鈕:
$("#user").change(function(){
xuan();
}) //點擊確定保存角色信息
$("#btn").click(function(){ var uid = $("#user").val(); //找到用戶名
var juese = "";// 找到角色代號
var ck = $(".ck"); //找到所有的checked
for(var i=0;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("修改成功");
}
});
})
});
處理頁面:<?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;
}
看效果:
默認選中角色;
更改以后選擇保存:
管理頁面總代碼:
View Code
處理頁面總代碼:<?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.登入頁面:
顯示很簡單:
帳號:
密碼:
寫登入處理<?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 "登入失敗";
//}
跳轉到主頁面,主頁面代碼:
每個人的主頁面都是不一樣的
主頁面
<?phpsession_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 "
{$arr[0][1]}
";}?>
用php的用戶體驗不好,最好還是得用ajax。
相關推薦:
php人員權限管理(RBAC)
總結
以上是生活随笔為你收集整理的php注解rbac,PHP的RBAC权限详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金士顿内存:为何备受瞩目?
- 下一篇: 4790k处理器 vs ecc内存:性能