• 权限管理


    权限管理又叫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>";
    }
    
    
    
    ?>
  • 相关阅读:
    python-ConfigParser模块【读写配置文件】
    MinGW安装和使用
    mybatis批量操作
    SSM框架的简单搭建
    idea录制宏
    数据导出,导入
    JS中调用android和ios系统手机打开相机并可选择相册功能
    get请求中url传参中文乱码问题
    hibernate criteria中Restrictions的用法
    hibernate报错
  • 原文地址:https://www.cnblogs.com/xingyue1988/p/6292992.html
Copyright © 2020-2023  润新知