权限管理
Posted 业务高于技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了权限管理相关的知识,希望对你有一定的参考价值。
权限管理又叫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=\'{$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=\'{$v[0]}\' />{$v[1]}"; 造复选框 } ?> </div> <br /> <input type="button" value="保存" 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>
第三步:保存的处理页面
<?php include("../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="登录" /> </form>
登录处理
<?php session_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> <?php session_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>"; } ?>
以上是关于权限管理的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段
ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统