权限管理

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>";
}



?>

 

以上是关于权限管理的主要内容,如果未能解决你的问题,请参考以下文章

JS+JavaBean判断管理员增删改的操作权限

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统

gitlab 可以进行版本和权限控制,bug管理吗?供部门内部使用,而且是Linux和Windows平台都能使用

使用 Git 来管理 Xcode 中的代码片段

教程4 - 验证和权限