在我们日常工作生活中,经常会用到人员权限管理,什么是人员权限管理呢?就是不同角色的人做不同角色的事,一一对应,各司其职,例如:
管理层可以在办公系统上拥有什么权限?
财务有什么权限?
市场营销人员有什么权限?
他们各自在一套办公系统中可以拥有哪些功能?我们来看一看:
首先是要用到五张表:三张主表:用户表、角色表、功能表:
两张附表:用户角色表、角色功能表:
第一步选择用户,因为用户不同,角色不同,实现的功能也不同,这里用下拉列表显示,遍历出用户名:
<h1>用户角色对应</h1> <div>请选择用户: <select id="user"><!--因为后边要写方法,所以给一个id--> <?php require "DBDA.class.php"; $db = new DBDA(); $sql = "select * from userss"; $arr = $db->query($sql); foreach($arr as $v) { echo "<option value=\'{$v[0]}\'>{$v[2]}</option>";//取出姓名 } ?> </select> </div><br />
第二步就是选择角色了,这里可以用复选框表示,因为一个用户可以有多个角色:
<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]}" ;//因为有许多的角色,所以用复选框,class是为下边的更改保存做准备 } ?> </div><br />
第三步就是给角色添加点击事件,这时引入jqurey就可以了,然后写点击事件:
function sel() { var uid = $("#user").val();//获取用户名 $.ajax({ url:"guanchuli.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);//选中更改后的值 } } } }) }
处理页面:
<?php require "DBDA.class.php"; $db = new DBDA(); $uid = $_POST["uid"]; $sql = "select jueseid from userinjuese where userid=\'{$uid}\'"; echo $db->strquery($sql);
效果图:
第四步是考虑到用户的角色可以更改,所以要添加更改保存功能,让用户可以更改已有角色:
<input type="button" value="保存" id="baocun" /><!--更改用户角色权限后保存-->
然后为保存更改写方法:
sel(); $("#user").change(function(){ sel(); }) $("#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"; $db = new DBDA(); $uid = $_POST["uid"]; $js = $_POST["js"]; //清空原有角色 $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); }
看一下保存效果:
保存前:
保存后:
管理页面完成后,我们来写一下登录页面,跟以前一样很简单的登录:
<body> <form action="guandengchuli.php" method="post"> <div>用户名:<input type="text" name="uid" /></div> <div>密码:<input type="password" name="pwd" /></div> <input type="submit" value="登录" /> </form> </body>
登录处理:
<?php session_start(); $uid = $_POST["uid"];//取出用户名 $pwd = $_POST["pwd"];//取出密码 require "DBDA.class.php"; $db = new DBDA(); $sql = "select pwd from userss where uid = \'{$uid}\'";//通过用户名找密码 $mm = $db->strquery($sql);//字符串取出来就是密码 if($mm == $pwd && !empty($pwd))//如果密码匹配且不为空 { $_SESSION["uid"] = $uid;//存储的用户名 header("location:guanmain.php");//返回主页面 } else { echo "用户名或密码错误!"; }
登录后主页面:
<?php session_start();//开启session,用来存储用户 $uid = ""; if(empty($_SESSION["uid"]))//如果用户名为空返回登录页面 { header("location:guandenglu.php"); exit; } $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}\') )";//利用子查询分别从三张表中通过各自的id查出所需要的信息 $arr = $db->query($sql); foreach($arr as $v) { echo "<div code=\'{$v[0]}\' class=\'list\'>{$v[1]}</div>"; } ?>
然后添加样式就可以了:
<style type="text/css"> .list{ width:100px; height:35px; border:1px solid #60F; margin:0px 2px 0px 2px; text-align:center; vertical-align:middle; line-height:35px;} </style>
这样整个权限管理就完成了,看下效果:
不同人登录后页面不同: