1.想好權限管理的作用?
2.有什么權限內容?
3.既然有權限管理那么就會有管理員?
4.登錄后每個人員的界面會是不一樣的?
一、想好這個權限是什么?
就做一個就像是vip的功能,普通用戶和vip用戶的功能是不一樣的,先來考慮一下數據庫怎么設計
肯定要有用戶表、還有用戶所用的角色、然后就是權限功能表;可是在這里面有關聯也就 是會另外有兩張相互關聯的表,這樣也就是5張表
在數據庫中建好這五張表:
(1)用戶表、角色表、功能表

(2)主表中的外鍵關系得兩個表:用戶與角色表、角色與功能表

二、建好表之后就是開始寫代碼了,首先是管理員的頁面
注意:這里只寫了用戶和角色的管理界面,沒有寫角色和功能的管理頁面,但是它們都是一樣的,會其一就會其二了
可以選擇用戶,然后根據選擇復選框來給他們添加說是刪除一些功能
(1)先可以顯示出想要的效果:比如用戶的選擇可以用下拉列表
<div>請選擇用戶: <select id="uid"> //給這個起個名字,可以在下面的操作中加事件
//這里是遍歷數據庫中的用戶表
</select> </div>
看下效果:

下拉列表中還沒有值,是因為還沒有進行數據庫操作
(2)鏈接數據庫操作,遍歷出數據庫中的用戶(遍歷數據庫前面的隨筆中已經寫過很多遍了)
//只是遍歷數據庫就可以,不用傳值的話,就不用寫傳值數據和傳值方式了
$.ajax({ url:"admain_cl.php", //用戶的處理界面 dataType:"TEXT", //返回的數據類型 success: function(data){
//處理頁面執行成功后將要執行的代碼處 } }) });
(3)用戶的處理界面
<?php
include("DBDA.class.php"); //調用封裝好的數據庫類
$db = new DBDA(); //造新對象
$sql = "select * from users"; //查詢語句,查詢用戶表中的所有信息
echo $db->StrQuery($sql); //執行封裝類中的字符串轉換方法
?>
封裝類中的字符串轉化方法:
<?php
class DBDA
{
public $host="localhost"; //使用的什么連接,這里是本地連接方式
public $uid="root"; //數據庫用戶
public $password="123"; //用戶的密碼
public $dbname="test1"; //使用的數據庫名
//返回字符串的方法
public function StrQuery($sql,$type=1)
{
$db = new MySQLi($this->host,$this->uid,$this->password,$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;
}
}
?>
(4)處理頁面寫好了之后,就可以寫主頁面中,執行處理頁面成功后的代碼了
success: function(data){
var hang = data.split("|"); //分割行
var str = "";
for(var i=0;i<hang.length;i++) //循環
{
var lie = hang[i].split("^"); //分割列
str +="<option value='"+lie[0]+"'>"+lie[2]+"</option>"; //拼接下拉列表項:想要顯示的是用戶名,所以表中索引是2代表了name,給這個項的值是代號,下面將會用到
}
$("#uid").html(str); //將值寫入下拉列表中
}
經過這4步后看下結果:數據庫中用戶表中的數據就可以遍歷出來了

(5)用戶寫好之后,就是角色了,可以使用復選框的方式顯示,這里還是可以用ajax,和上面一樣的方法,不多說直接上代碼
還是先要寫個div放這個復選框
<div>請選擇角色:
<div id="juese">
//遍歷放值的地方
</div>
</div>
然后就是遍歷數據庫了
$.ajax({
url:"admain_cl1.php", //功能的處理頁面
dataType:"TEXT", //返回的數據類型
success: function(d){
var hang = d.split("|"); //拆分行
var str = "";
for(var i=0;i<hang.length;i++)
{
var lie = hang[i].split("^"); //拆分列
str+="<input class='ck' type='checkbox' value='"+lie[0]+"' />"+lie[1]; //顯示的復選框,索引1就是數據庫中的name列
}
$("#juese").html(str); //將值寫入div中
}
});
角色的處理頁面的代碼
<?php
include("DBDA.class.php"); //調用封裝好的數據庫類
$db = new DBDA(); //造新對象
$sql = "select * from juese"; //查詢語句,查詢角色表中的所有信息
echo $db->StrQuery($sql); //執行封裝類中的字符串轉換方法
?>
寫完之后就是運行查看下有沒有錯誤

(6)修改完成后就是要保存了,在頁面中寫一個保存按鈕
<input type="button" value="保存" id="save" /> //給這個按鈕起個名字,因為要有點擊事件
至此,頁面的顯示都可以完成了

(7)這樣,在就是怎么讓數據庫中用戶本有的角色顯示出來,那就是要用到下拉列表和復選框的值了
可以把他寫入方法里,然后調用這個方法
function Xuan()
{
var uid = $("#uid").val(); //找到下拉類表的值
$.ajax({
url:"admain_cl2.php", //項的處理頁面
data:{uid:uid},
type:"POST",
dataType:"TEXT",
success: function(b){
var hang = b.split("|"); //分割行
var ck = $(".ck"); //找到復選項的值
ck.prop("checked",false); //清理選中
for(var i=0;i<ck.length;i++)
{
var zhi = ck.eq(i).val(); //取出選項的值
if(hang.indexOf(zhi)>=0)
{
ck.eq(i).prop("checked",true); //是的話就讓這一項的值選中
}
}
}
})
}
(8)項值的處理頁面
<?php
include("DBDA.class.php"); //調用封裝好的數據庫類
$db = new DBDA(); //造新對象
$uid = $_POST["uid"]; //傳過來的值
$sql = "select jueseid from userinjuese where userid='{$uid}'"; //傳過來的值和表中的用戶值相等
echo $db->StrQuery($sql); //執行封裝類中的字符串轉換方法
?>
這樣,每個用戶的默認角色就選中了

(9)最后就是保存修改后的值了
可以直接用全部刪除在重新寫入的方法來進行值的選擇;對保存按鈕添加單擊事件
$("#save").click(function(){
var uid = $("#uid").val(); //找到用戶的值
var ck = $(".ck"); //選項的值
var str = "";
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:"admain_cl3.php", //保存的處理頁面
data:{uid:uid,js:str}, //將用戶和項的值傳過去
type:"POST", //傳值方式
dataType:"TEXT",
success: function(data){
if(data.trim()=="OK")
{
alert("保存成功!"); //保存成功后,彈出框
}
}
});
})
保存的處理頁面
<?php
include("DBDA.class.php"); //調用的封裝類
$db = new DBDA(); //造新對象
//傳過來的用戶和選項的值
$uid = $_POST["uid"];
$js = $_POST["js"];
$sdelete = "delete from userinjuese where userid='{$uid}'"; //全部刪除將用戶代號和用戶相等的
$db->Query($sdelete,0); //執行語句
$attr = explode("|",$js);
foreach($attr as $v)
{
$sql = "insert into userinjuese values('','{$uid}','{$v}')"; //修改表中的值
$db->Query($sql,0); //執行語句
}
echo "OK";
這個管理員的頁面到這也就結束了,整體的看下結果:
1.默認還沒有進行修改的這個用戶

2.進行修改之后的這個用戶,單擊保存后彈出保存成功對話框

二、管理員頁面弄好之后,就是登陸頁面了,用戶的登錄頁面很簡單,不多說了,直接上代碼
(1)登錄的基本顯示:都是些基本語句
<h1>用戶登錄</h1> <div>賬號:<input type="text" id="uid" /></div> <div>密碼:<input type="password" id="pwd" /></div> <div><input type="button" value="登錄" id="btn" /></div>
(2)這里登錄,我們也用ajax進行登錄吧
$("#btn").click(function(){ //對登錄按鈕添加單擊事件
var uid=$("#uid").val(); //獲取用戶的值
var pwd=$("#pwd").val(); //獲取密碼的值
$.ajax({
url:"logincl.php", //編寫登錄的處理頁面
data:{uid:uid,pwd:pwd}, //將用戶和密碼傳到處理頁面
type:"POST",
dataType:"text",
success: function(data)
{
if(data.trim()=="OK")
{
window.location.href="main.php"; //處理頁面執行成功后,跳轉到主頁面
}
else
{
alert("用戶名密碼輸入錯誤"); //否則就提示錯誤
}
}
})
})
(3)看下處理頁面的編寫
<?php
session_start(); //開啟session
include("DBDA.class.php"); //調用封裝的類
$db = new DBDA(); //造新對象
//傳過來的值
$uid = $_POST["uid"];
$pwd = $_POST["pwd"];
//查詢語句
$sql = " select pwd from users where uid='{$uid}' and pwd='{$pwd}' ";
//執行語句
$attr = $db->Query($sql);
if(!empty($pwd) && !empty($attr) && $attr[0][0]==$pwd)
{
$_SESSION["uid"] = $uid; //session接收用戶值
echo "OK";
}
else
{
echo "ON";
}
?>
最后,我們看下最后結果,登錄成功就會進入主頁,登錄失敗會提示錯誤

三、登錄成功的主頁面:每個用戶的主頁面應該是不一樣的
(1)既然后session,那就先將session開啟
<?php
session_start(); //開啟session
if(empty($_SESSION["uid"])) //判斷session是否為空
{
header("location:login.php"); //空的話就返回登錄頁面
}
else
{
echo $_SESSION["uid"]; //否則就輸出用戶名
}
?>

(2)我這里是寫了個表用來裝遍歷出來的功能表:可以給這個表加點樣式
<table id="t" width="7%" cellpadding="0" cellspacing="0" border="1">
</table>
(3)ajax傳值了:下面的語句代表什么意思上面用的時候都將了很多遍了,就不重復說明了
$.ajax({
url:"main_cl.php", //主頁面的處理頁面
dataType:"TEXT",
success: function(data){
var hang = data.split("|");
var str = "";
for(var i=0;i<hang.length;i++)
{
var lie = hang[i].split("^");
str +="<tr><td>"+lie[0]+"</td></tr>"; //因為處理頁面中只找了name,所以索引就是0
}
$("#t").html(str); //將值寫入表中
}
})
主頁面的處理頁面
<?php
session_start(); //開啟session
$uid = $_SESSION["uid"]; //接收session傳過來的值
include("DBDA.class.php");
$db = new DBDA();
//這個是用到的相關子查詢方法
$sql = "select name from rules where code in (select ruleid from juesewithrules where jueseid in (select code from juese where code in (select jueseid from userinjuese where userid='{$uid}')))";
//執行語句
echo $db->StrQuery($sql);
?>
最后就是可以登錄顯示不一樣用戶權限功能的頁面了,看下整體結果:
(1)登錄一個用戶,進入主頁

(2)看下這個用戶的管理界面是不是有這些功能
下面是數據庫中的該用戶的信息表:用戶和角色的表、角色表、功能表、角色和功能表

不難看出,該用戶的登錄成功后的主頁面顯示的是對的
不同用戶登錄的頁面是不一樣的

至此,這個人員權限的管理就結束了~~~
