權限是指不同的人員登錄以后會用不同的頁面。
一、想好這個權限是什么?
肯定要有用戶表、還有用戶所用的角色、然后就是權限功能表;可是在這里面有關聯也就 是會另外有兩張相互關聯的表,這樣也就是5張表
在數據庫中建好這五張表:
(1)用戶表、角色表、功能表、
(2)主表中的外鍵關系得兩個表:用戶與角色表、角色與功能表
二、建好表之后就是開始寫代碼了,首先是管理員的頁面
可以選擇用戶,然后根據選擇復選框來給他們添加或是刪除一些功能
(1)先可以顯示出想要的效果:比如選擇可以用下拉列表
<div>請選擇姓名: <select id="user"> //給這個起個名字,可以在下面的操作中加事件<br> //這里是遍歷數據庫中的用戶表<br> </select> </div>
看下效果:
下拉列表中還沒有值,是因為還沒有進行數據庫操作
(2)鏈接數據庫操作,遍歷出數據庫中的用戶
<?php require "DBDA.class.php"; $db=new DBDA(); $sql="select * from users"; $arr=$db->query($sql); foreach($arr as $v) { echo "<option value='{$v[0]}'>{$v[2]}</option>"; } ?>
這樣下拉框里就有數據了
(3)用戶寫好之后,就是角色了,可以使用復選框的方式顯示,和上面一樣的方法,
還是先要寫個div放這個復選框
<div>請選擇角色: <?php $sql="select * from juese"; $arr=$db->query($sql); foreach($arr as $v) { echo "<input class='ck' type='checkbox' value={$v[0]} />{$v[1]}"; } ?> </div>
(4)修改完成后就是要保存了,在頁面中寫一個保存按鈕
<input type="button" id="baocun" value="保存" />
(5)這樣,在就是怎么讓數據庫中用戶本有的角色顯示出來,那就是要用到下拉列表和復選框的值了
可以把他寫入方法里,然后調用這個方法
function Sel() { var uid=$("#user").val(); $.ajax({ url:"gaichuli.php", data:{uid:uid}, type:"POST", dataType:"TEXT", success: function(data){ var js=data.trim().split("|"); var ck=$(".ck"); ck.prop("checked",false); for(var i=0;i<ck.length;i++) { var v=ck.eq(i).val(); if(js.indexOf(v)>=0) { ck.eq(i).prop("checked",true); } } } }) }
處理頁面
require "DBDA.class.php"; $Uid=$_POST["uid"]; $db=new DBDA(); $sql="select JueSeId from userinjuese where UserId='{$Uid}'"; echo $db->StrQuery($sql);
效果:
這樣就可以了
(6)最后就是保存修改后的值了
可以直接用全部刪除在重新寫入的方法來進行值的選擇;對保存按鈕添加單擊事件
$("#baocun").click(function(){ var uid=$("#user").val(); var str=""; var ck=$(".ck"); for(var i=0;i<ck.length;i++) { if(ck.eq(i).prop("checked")) { str=str+ck.eq(i).val()+","; } } str=str.substr(0,str.length-1); $.ajax({ url:"add.php", data:{uid:uid,js:str}, type:"POST", dataType:"TEXT", success: function(data){ alert("保存成功") } }) })
保存的處理頁面
<?php require "DBDA.class.php"; $Uid=$_POST["uid"]; $js=$_POST["js"]; $db=new DBDA(); //清空原有角色 $sql="delete from userinjuese where UserId='{$Uid}'"; $db->query($sql,0); //添加選中的角色 $ajs=explode(",",$js); foreach($ajs as $v){ $sql="insert into userinjuese values('','{$Uid}','{$v}')"; $db->query($sql,0); }
這個管理員的頁面到這也就結束了,整體的看下結果:
這個是默認的
這個是保存后的
三、管理員頁面弄好之后,就是登陸頁面了,用戶的登錄頁面很簡單。
(1)登錄的基本顯示:
<form action="yhdlchuli.php" method="post"> <div>用戶名:<input type="text" name="uid" /></div> <div>密碼:<input type="password" name="pwd" /></div> <input type="submit" value="登錄" /> </form>
(2)這里登錄,我們用php進行登錄。
<?php session_start(); require "DBDA.class.php"; $db=new DBDA(); $uid=$_POST["uid"]; $pwd=$_POST["pwd"]; $sql="select pwd from users where uid='{$uid}'"; $mm=$db->StrQuery($sql); var_dump($mm); if($mm==$pwd && !empty($pwd)) { $_SESSION["uid"]=$uid;//這里我們將登陸的id保存到session里再登陸成功轉到主頁面的時候要用到 header("location:neirong.php"); } else { echo "用戶名或密碼錯誤!"; }
四、登錄成功的主頁面:每個用戶的主頁面應該是不一樣的
(1)既然用到session,那就先將session開啟然后判斷
<?php session_start(); //開啟session if(empty($_SESSION["uid"])) //判斷session是否為空 { header("location:login.php"); //空的話就返回登錄頁面 } else { echo $_SESSION["uid"]; //否則就輸出用戶名 } ?>
(2)傳值 遍歷出來后我用div顯示並且我還加了樣式
<?php $uid=$_SESSION["uid"]; require "DBDA.class.php"; $db=new DBDA(); $sql="select * from rules where code in (select distinct ruleid from juesewithrules where jueseid in (select jueseid from userinjuese where userid='{$uid}'))"; $arr=$db->query($sql); foreach($arr as $v) { echo "<div Code={$v[0]} class='list'>{$v[1]}</div>"; } ?>
<style> .list{width:100px; height:35px; border:1px solid #300; background-color:#009; color:#000; margin:0px 2px 0px 2px; text-align:center; vertical-align:middle; line-height:35px;} </style>
最后就是可以登錄顯示不一樣用戶權限功能的頁面了,看下整體結果:
李四只有這兩個功能
我們再看看其他人的
他們這些職務是與數據庫中相對應的。