首页 > 代码库 > 权限管理
权限管理
权限管理又叫RBAC,一个用户可以有多个角色,一个角色可以有多个功能,还包括对用户角色的更改,相应的功能也变化
权限管理的五张表
用户对应角色,使用的表有:用户表、角色表、用户对应角色表
1.分别显示用户名和角色名
2.根据下拉用户名的变化,更改相应复选框中的角色
3.修改用户角色时,先要把用户对应角色表,这个用户所有的信息删除,再把取到的用户名和角色代号新添加。
第一步:对用户名和角色进行显示,采用在页面嵌入php代码的方式
<body><h1>人员对应角色管理</h1><div>请选择人员: <select id="user"> <?php include("../gongju/DBDA.class.php"); $db = new DBDA(); $sql = "select * from users"; 查数据库 $attr = $db->Query($sql); foreach($attr as $v) 遍历二维数组 { echo "<option value=http://www.mamicode.com/‘{$v[0]}‘>{$v[2]}</option>"; 造option添加到下拉列表 } ?> </select></div><br /><div> 请选择角色: <?php $sjs = "select * from juese"; $ajs = $db->Query($sjs); foreach($ajs as $v) { echo "<input class=‘ck‘ type=‘checkbox‘ value=http://www.mamicode.com/‘{$v[0]}‘ />{$v[1]}"; 造复选框 } ?> </div><br /><input type="button" value="http://www.mamicode.com/保存" id="save" /></body>
第二步:使用juery操作人员变化时,相应的角色也相应变化,并且改变人员的角色信息,添加保存,添加保存的基本思路是先把数据库里人员对应的角色信息全部删除,然后再取到选中的部分,添加到数据库。
<script type="text/javascript">XuanZhong();$("#user").change(function(){ XuanZhong(); }) $("#save").click(function(){ var uid = $("#user").val(); var ck = $(".ck"); 取到class名为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:"add.php", data:{uid:uid,js:str}, 把用户名和字符串传递到处理页面 type:"POST", dataType:"TEXT", success: function(data){ if(data.trim()=="OK") { alert("保存成功!"); } } }); }) function XuanZhong(){ var uid = $("#user").val(); $.ajax({ url:"seljuese.php", data:{uid:uid}, type:"POST", dataType:"TEXT", success: function(data){ var sz = data.split("|"); var ck = $(".ck"); ck.prop("checked",false); for(var i=0;i<ck.length;i++) { var zhi = ck.eq(i).val(); if(sz.indexOf(zhi)>=0) { ck.eq(i).prop("checked",true); } } } });}</script>
第三步:保存的处理页面
<?phpinclude("../ajax/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.根据登录时存在session里的用户名,查询改用户的角色代号
2.根据上述的角色代号。查询相应功能显示
第一步:先做登录页面,登录成功要把用户名存到session里面
<form action="loginchuli.php" method="post"><div>用户名:<input type="text" name="uid" /></div><div>密码:<input type="text" name="pwd" /></div><input type="submit" value="http://www.mamicode.com/登录" /></form>
登录处理
<?phpsession_start();include("../gongju/DBDA.class.php");$db = new DBDA();$uid = $_POST["uid"];$pwd = $_POST["pwd"];$sql = "select count(*) from users where uid=‘{$uid}‘ and pwd=‘{$pwd}‘";if($db->StrQuery($sql)>0){ $_SESSION["uid"]= $uid; header("location:main.php");}else{ echo "登录失败!";}
第二步:1.根据登录的用户名查询角色代号。
2.根据角色代号,查到功能代号,并把功能代号存到一个新建的数组中
3.遍历功能数组
<body><?phpsession_start();$uid = "";if(empty($_SESSION["uid"])){ header("location:login.php");}else{ $uid = $_SESSION["uid"];}include("../gongju/DBDA.class.php");$db = new DBDA();//根据用户名查询角色代号$sjs = "select jueseid from userinjuese where userid=‘{$uid}‘";$ajs = $db->Query($sjs);//根据角色代号查功能代号$attr = array(); //存功能代号foreach($ajs as $v){ $sgn = "select ruleid from juesewithrules where jueseid=‘{$v[0]}‘"; $agn = $db->Query($sgn); foreach($agn as $vg) { $attr[] = $vg[0]; }}$attr = array_unique($attr); 把功能数组去重//遍历所有功能显示菜单foreach($attr as $v){ $sql = "select name from rules where code=‘{$v}‘"; $name = $db->StrQuery($sql); echo "<div class=‘menu‘ bs=‘{$v}‘>{$name}</div>";}?>
权限管理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。