控制人員權限用的最多的應該是OA辦公自動化系統和像ERP,CRM,CMS這樣的管理系統,就是通過控制用戶的權限來控制其擁有的角色和功能,比如管理員可以擁有所有權限和功能,前台只能擁有登記和通報信息等。
一般標准的權限管理都會有5張數據表來控制,形成一個W型的連接關系,如下

看看表的結構
1.用戶表 2.用戶角色對應表 3.角色表 4.角色功能對應表 5.功能表

首先我們來做一個管理員的頁面,這個頁面能顯示所有用戶,並且能看到他們對應的角色,這里我們還能修改他們的角色,先看看效果

一步步來,先寫出來選擇用戶的功能,當然,顯示的用戶都是從用戶表里加載過來的
請選擇用戶: <select id="sel"> <option>請選擇</option> <?php require "../DataBase.class.php"; $db=new DataBase(); $sql="select * from users"; $arr=$db->Query($sql); foreach($arr as $v){ echo "<option value='{$v[0]}'>{$v[2]}</option>"; } ?> </select>
再把角色的復選框寫出來 ,附帶那個保存按鈕也寫出來吧
請選擇角色:
<?php
$sql2="select * from juese";
$arr2=$db->Query($sql2);
foreach($arr2 as $k){
echo "<input type='checkbox' class='ck' value='{$k[0]}'>$k[1]";
}
?>
<div><input type="button" id="save" value="保存"/></div>
界面寫完了,下面實現功能代碼
功能1.選擇相應用戶,默認顯示他對應的角色(復選框的默認選中)
用jquery的函數實現(頁面開頭先引入Jquery)
$("#sel").change(function (){
var uid=$("#sel").val(); //取到下拉選擇的用戶
$.ajax({ //調用ajax
url:"chuli.php",
data:{uid:uid},
type:"POST",
dataType:"TEXT",
success: function(data){
var js=data.trim().split("|"); //返回的字符串只有行,進行拆分和去空格,然后得到的是角色數組
var ck=$(".ck"); //獲取所有復選框的值,交給了一個ck數組
ck.prop("checked",false); //先清空上次選擇用戶時留下的復選內容
for(var i=0;i<ck.length;i++) //遍歷判斷
{
var v=ck.eq(i).val(); //v代表的是每個復選框的值
if(js.indexOf(v)>=0){ //判斷一下,返回的角色表中的數據是否存在,用的 indexOf方法,如果不存在則返回-1
ck.eq(i).prop("checked",true); //將數據庫存在的角色對應的屬性設置為選中
}
}
}
})
});
下面是處理頁面chuli.php
<?php $uid=$_POST["uid"]; require "../DataBase.class.php"; $db=new DataBase(); $sql="select jueseid from userinjuese where userid='{$uid}'"; echo $db->StrQuery($sql); ?>
如果看不明白的話,看看這個返回字符串的類怎么寫的
<?php class DataBase { public $host="localhost"; public $uid = "root"; public $pwd = ""; public $dbname = "mydb"; //成員方法 public function Query($sql,$type=1) { $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $r = $db->query($sql); if($type==1) { return $r->fetch_all(); } else { return $r; } } //返回字符串的方法 public function StrQuery($sql,$type=1) { $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $r = $db->query($sql); if($type==1) { $attr = $r->fetch_all(); $str = ""; foreach($attr as $v) { $str .= implode("^",$v)."|"; } return substr($str,0,strlen($str)-1); } else { return $r; } } //返回JSON public function jsonquery($sql,$type=1) { $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); $r = $db->query($sql); if($type==1) { return json_encode($r->fetch_all(MYSQLI_ASSOC)); } else { return $r; } } }
功能2.修改用戶對應的角色,並且保存
$("#save").click(function (){ //'保存'按鈕的點擊事件
var uid=$("#sel").val(); //獲取下拉選擇的用戶
var str="";
var ck=$(".ck"); //獲取所有復選框的值,放到ck數組
for(var i=0;i<ck.length;i++)
{
if(ck.eq(i).prop("checked")) //判斷,如果復選框的值為選中
{
str+=ck.eq(i).val()+","; //將選中的復選框值用“,”拼接起來交給str
}
}
str=str.substr(0,str.length-1); //截取一下str,因為最后尾部會多余一個符號
$.ajax({
url:"save.php",
data:{uid:uid,js:str}, //將用戶和拼接好的已選擇復選內容交給處理頁面
dataType:"TEXT",
type:"POST",
success: function(data){
alert("保存成功")
}
})
})
處理頁面
<?php $uid=$_POST["uid"]; //獲取到了傳遞的用戶 $js=$_POST["js"]; //獲取到了傳遞過來的已選擇的復選框內容 require "../DataBase.class.php"; $db=new DataBase(); $sql="delete from userinjuese where userid='{$uid}'"; //先把數據庫中原來用戶的角色清空,不然修改起來會麻煩 $db->Query($sql,0); $vv=explode(",",$js); //將復選框內容拆分,因為傳來的是一個,隔開的長字符串,得到的vv是一個數組 foreach($vv as $v){ //遍歷這個數組 $sql2="insert into userinjuese values('','{$uid}','{$v}')"; //依次寫入數據庫 $db->Query($sql2,0); } ?>
功能完成了。結束
