权限是指不同的人员登录以后会用不同的页面。
一、想好这个权限是什么?
肯定要有用户表、还有用户所用的角色、然后就是权限功能表;可是在这里面有关联也就 是会另外有两张相互关联的表,这样也就是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>
最后就是可以登录显示不一样用户权限功能的页面了,看下整体结果:
李四只有这两个功能
我们再看看其他人的
他们这些职务是与数据库中相对应的。