權限是指不同的人員登錄以后會用不同的頁面。
一、想好這個權限是什么?
肯定要有用戶表、還有用戶所用的角色、然后就是權限功能表;可是在這里面有關聯也就 是會另外有兩張相互關聯的表,這樣也就是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>
最后就是可以登錄顯示不一樣用戶權限功能的頁面了,看下整體結果:

李四只有這兩個功能
我們再看看其他人的

他們這些職務是與數據庫中相對應的。
