控制人員權限用的最多的應該是OA辦公自動化系統和像ERP,CRM,CMS這樣的管理系統,就是通過控制用戶的權限來控制其擁有的角色和功能,比如管理員可以擁有所有權限和功能,前台只能擁有登記和通報信息等。
一般標准的權限管理都會有5張數據表來控制,形成一個W型的連接關系,如下
看看表的結構
1.用戶表 2.用戶角色對應表 3.角色表 4.角色功能對應表 5.功能表
首先我們來做一個管理員的頁面,這個頁面能顯示所有用戶,並且能看到他們對應的角色,這里我們還能修改他們的角色,先看看效果
一步步來,先寫出來選擇用戶的功能,當然,顯示的用戶都是從用戶表里加載過來的
1 請選擇用戶: 2 <select id="sel"> 3 <option>請選擇</option> 4 <?php 5 require "../DataBase.class.php"; 6 $db=new DataBase(); 7 $sql="select * from users"; 8 $arr=$db->Query($sql); 9 foreach($arr as $v){ 10 echo "<option value='{$v[0]}'>{$v[2]}</option>"; 11 12 } 13 ?> 14 </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)
1 $("#sel").change(function (){ 2 var uid=$("#sel").val(); //取到下拉選擇的用戶 3 $.ajax({ //調用ajax 4 url:"chuli.php", 5 data:{uid:uid}, 6 type:"POST", 7 dataType:"TEXT", 8 success: function(data){ 9 var js=data.trim().split("|"); //返回的字符串只有行,進行拆分和去空格,然后得到的是角色數組 10 var ck=$(".ck"); //獲取所有復選框的值,交給了一個ck數組 11 ck.prop("checked",false); //先清空上次選擇用戶時留下的復選內容 12 for(var i=0;i<ck.length;i++) //遍歷判斷 13 { 14 var v=ck.eq(i).val(); //v代表的是每個復選框的值 15 if(js.indexOf(v)>=0){ //判斷一下,返回的角色表中的數據是否存在,用的 indexOf方法,如果不存在則返回-1 16 ck.eq(i).prop("checked",true); //將數據庫存在的角色對應的屬性設置為選中 17 18 } 19 } 20 21 22 23 } 24 }) 25 26 });
下面是處理頁面chuli.php
1 <?php 2 $uid=$_POST["uid"]; 3 require "../DataBase.class.php"; 4 $db=new DataBase(); 5 $sql="select jueseid from userinjuese where userid='{$uid}'"; 6 echo $db->StrQuery($sql); 7 8 9 10 ?>
如果看不明白的話,看看這個返回字符串的類怎么寫的
1 <?php 2 class DataBase 3 { 4 public $host="localhost"; 5 public $uid = "root"; 6 public $pwd = ""; 7 public $dbname = "mydb"; 8 9 //成員方法 10 public function Query($sql,$type=1) 11 { 12 $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); 13 $r = $db->query($sql); 14 15 if($type==1) 16 { 17 return $r->fetch_all(); 18 } 19 else 20 { 21 return $r; 22 } 23 } 24 25 //返回字符串的方法 26 public function StrQuery($sql,$type=1) 27 { 28 $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); 29 $r = $db->query($sql); 30 31 if($type==1) 32 { 33 $attr = $r->fetch_all(); 34 $str = ""; 35 foreach($attr as $v) 36 { 37 $str .= implode("^",$v)."|"; 38 } 39 40 return substr($str,0,strlen($str)-1); 41 } 42 43 else 44 { 45 return $r; 46 } 47 } 48 49 //返回JSON 50 public function jsonquery($sql,$type=1) 51 { 52 $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname); 53 $r = $db->query($sql); 54 55 if($type==1) 56 { 57 return json_encode($r->fetch_all(MYSQLI_ASSOC)); 58 } 59 else 60 { 61 return $r; 62 } 63 } 64 }
功能2.修改用戶對應的角色,並且保存
1 $("#save").click(function (){ //'保存'按鈕的點擊事件 2 var uid=$("#sel").val(); //獲取下拉選擇的用戶 3 var str=""; 4 var ck=$(".ck"); //獲取所有復選框的值,放到ck數組 5 for(var i=0;i<ck.length;i++) 6 { 7 if(ck.eq(i).prop("checked")) //判斷,如果復選框的值為選中 8 { 9 str+=ck.eq(i).val()+","; //將選中的復選框值用“,”拼接起來交給str 10 11 } 12 13 14 15 } 16 str=str.substr(0,str.length-1); //截取一下str,因為最后尾部會多余一個符號 17 $.ajax({ 18 url:"save.php", 19 data:{uid:uid,js:str}, //將用戶和拼接好的已選擇復選內容交給處理頁面 20 dataType:"TEXT", 21 type:"POST", 22 success: function(data){ 23 24 alert("保存成功") 25 26 } 27 28 29 30 31 32 }) 33 34 35 36 37 })
處理頁面
1 <?php 2 $uid=$_POST["uid"]; //獲取到了傳遞的用戶 3 $js=$_POST["js"]; //獲取到了傳遞過來的已選擇的復選框內容 4 require "../DataBase.class.php"; 5 $db=new DataBase(); 6 $sql="delete from userinjuese where userid='{$uid}'"; //先把數據庫中原來用戶的角色清空,不然修改起來會麻煩 7 $db->Query($sql,0); 8 $vv=explode(",",$js); //將復選框內容拆分,因為傳來的是一個,隔開的長字符串,得到的vv是一個數組 9 foreach($vv as $v){ //遍歷這個數組 10 $sql2="insert into userinjuese values('','{$uid}','{$v}')"; //依次寫入數據庫 11 $db->Query($sql2,0); 12 13 } 14 15 16 ?>
功能完成了。結束