首页 > 代码库 > 权限管理

权限管理

权限管理又叫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>";}?>

 

权限管理