php人员权限管理

时间:2024-02-20 14:10:42

在我们日常工作生活中,经常会用到人员权限管理,什么是人员权限管理呢?就是不同角色的人做不同角色的事,一一对应,各司其职,例如:

管理层可以在办公系统上拥有什么权限?

财务有什么权限?

市场营销人员有什么权限?

他们各自在一套办公系统中可以拥有哪些功能?我们来看一看:

首先是要用到五张表:三张主表:用户表、角色表、功能表:

两张附表:用户角色表、角色功能表:

第一步选择用户,因为用户不同,角色不同,实现的功能也不同,这里用下拉列表显示,遍历出用户名:

<h1>用户角色对应</h1>
<div>请选择用户:
<select id="user"><!--因为后边要写方法,所以给一个id-->
<?php
require "DBDA.class.php";
$db = new DBDA();
$sql = "select * from userss";
$arr = $db->query($sql);
foreach($arr as $v)
{
    echo "<option value=\'{$v[0]}\'>{$v[2]}</option>";//取出姓名
}
?>
</select>
</div><br />

第二步就是选择角色了,这里可以用复选框表示,因为一个用户可以有多个角色:

<div>请选择角色:
    <?php
    $sql = "select * from juese";
    $arr = $db->query($sql);
    foreach($arr as $v)
    {
        echo "<input class=\'ck\' type=\'checkbox\' value=\'{$v[0]}\' />{$v[1]}" ;//因为有许多的角色,所以用复选框,class是为下边的更改保存做准备
    }
    ?>
</div><br />

第三步就是给角色添加点击事件,这时引入jqurey就可以了,然后写点击事件:

function sel()
{
    var uid = $("#user").val();//获取用户名
    $.ajax({
        url:"guanchuli.php",
        data:{uid:uid},
        type:"POST",
        dataType:"TEXT",
        success: function(data){
            var js = data.trim().split("|");//拆分字符串
            var ck = $(".ck");
            ck.prop("checked",false);//清楚掉选中项
            for(var i=0;i<ck.length;i++)
            {
                var v = ck.eq(i).val();//取出改掉后的值
                if(js.indexOf(v)>=0)
                {
                    ck.eq(i).prop("checked",true);//选中更改后的值
                }
            }
        }
    })
    
}

处理页面:

<?php
require "DBDA.class.php";
$db = new DBDA();
$uid = $_POST["uid"];
$sql = "select jueseid from userinjuese where userid=\'{$uid}\'";
echo $db->strquery($sql);

效果图:

第四步是考虑到用户的角色可以更改,所以要添加更改保存功能,让用户可以更改已有角色:

<input type="button" value="保存" id="baocun" /><!--更改用户角色权限后保存-->

然后为保存更改写方法:

sel();
$("#user").change(function(){
    sel();
})
$("#baocun").click(function(){
    var uid =$("#user").val();//找到用户
    var str = "";
    var ck = $(".ck")//取出选项的值
    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){
                alert("保存成功!");
            }
        })
    })

保存处理页面:

<?php
require "DBDA.class.php";
$db = new DBDA();
$uid = $_POST["uid"];
$js = $_POST["js"];

//清空原有角色
$sql = "delete from userinjuese where userid = \'{$uid}\'";
$db->query($sql,0);
//添加选中的角色
$ajs = explode(",",$js);

foreach($ajs as $v)
{
    $sql = "insert into userinjuese values(\'\',\'{$uid}\',\'{$v}\')";
    $db->query($sql,0);
}

看一下保存效果:

保存前:

保存后:

管理页面完成后,我们来写一下登录页面,跟以前一样很简单的登录:

<body>
<form action="guandengchuli.php" method="post">
<div>用户名:<input type="text" name="uid" /></div>
<div>密码:<input type="password" name="pwd" /></div>
<input type="submit" value="登录" />
</form>
</body>

登录处理:

<?php
session_start();
$uid = $_POST["uid"];//取出用户名
$pwd = $_POST["pwd"];//取出密码
require "DBDA.class.php";
$db = new DBDA();
$sql = "select pwd from userss where uid = \'{$uid}\'";//通过用户名找密码
$mm = $db->strquery($sql);//字符串取出来就是密码
if($mm == $pwd && !empty($pwd))//如果密码匹配且不为空
{
    $_SESSION["uid"] = $uid;//存储的用户名
    header("location:guanmain.php");//返回主页面
}
else
{
    echo "用户名或密码错误!";
}

登录后主页面:

<?php
session_start();//开启session,用来存储用户
$uid = "";
if(empty($_SESSION["uid"]))//如果用户名为空返回登录页面
{
    header("location:guandenglu.php");
    exit;
}
$uid = $_SESSION["uid"];
require "DBDA.class.php";
$db = new DBDA();
$sql = "select *from rules where code in(select distinct ruleid from juesewithrules where jueseid in(select jueseid from userinjuese where userid = \'{$uid}\') )";//利用子查询分别从三张表中通过各自的id查出所需要的信息
$arr = $db->query($sql);
foreach($arr as $v)
{
    echo "<div code=\'{$v[0]}\' class=\'list\'>{$v[1]}</div>";
}
?>

然后添加样式就可以了:

<style type="text/css">
.list{ width:100px; height:35px; border:1px solid #60F; margin:0px 2px 0px 2px; text-align:center; vertical-align:middle; line-height:35px;}
</style>

这样整个权限管理就完成了,看下效果:

不同人登录后页面不同: