> 백엔드 개발 > PHP 튜토리얼 > PHP 인사 권한 관리(RBAC)

PHP 인사 권한 관리(RBAC)

迷茫
풀어 주다: 2023-03-06 22:10:02
원래의
1686명이 탐색했습니다.

권한 관리에 대해 이야기하기 전에 먼저 권한 관리에 필요한 기능이 무엇인지 알아야 합니다.

(1) 사용자는 액세스만 가능하며, 컨트롤러 지정, 지정 방식

 (2) 사용자는 여러 사용자 그룹에 존재할 수 있음

 (3) 사용자 그룹 지정된 컨트롤러를 선택할 수 있음 그리고 지정된 메소드

(4)에 컨트롤러와 메소드를 추가할 수 있습니다

RBAC(Role-Based Access Control(role-based access) 제어)는 사용자가 역할을 통해 권한과 연결되어 있음을 의미합니다. 간단히 말해서 사용자에게는 여러 역할이 있고 각 역할에는 여러 권한이 있습니다. 이러한 방식으로 "사용자 역할 권한" 권한 부여 모델이 구성됩니다. 이 모델에서는 일반적으로 사용자와 역할, 역할과 권한 사이에 다대다 관계가 있습니다.

1. 데이터베이스 설계

5개의 테이블 작성, 먼저 사용자 테이블, 역할 테이블, 함수 테이블:

테이블 연결 테이블... 다음은 역할 메뉴 테이블과 사용자 역할 테이블입니다:

2. 관리자 관리 페이지 ,

<?php
    include ("../db.class.php");
    $db = new db();
    $sql = "select * from qxyh";
    $arr = $db->Query($sql);
    foreach ($arr as $v)
    {
        echo "<option value=&#39;{$v[0]}&#39;>{$v[2]}</option>";
    }

    ?>
로그인 후 복사

(1) 드롭다운에 따라 사용자 이름과 역할 이름을 각각 표시합니다

(2). 사용자 이름 변경, 해당 체크박스

(3)에서 역할을 변경합니다. 사용자 역할을 수정하는 경우 먼저 해당 사용자의 해당 역할 테이블과 이 사용자의 모든 정보를 삭제하고, 그런 다음 검색 사용자 이름과 역할 코드가 새로 추가됩니다.

드롭다운 목록 사용: PHP 쿼리를 삽입하고 탐색하여 드롭다운 목록으로 표시합니다.

역할, 여러 Marquee 사용:


<p style="margin-bottom: 7px;"><p>请选择角色<br/><?php<br/>$sjs = "select * from qxzw";<br/>$ajs = $db->Query($sjs);<br/>foreach ($ajs as $v){    <br/>    echo "<input type=&#39;checkbox&#39; value=&#39;{$v[0]}&#39; class=&#39;ck&#39;/>{$v[1]} ";<br/>}?><br/></p><br/><input type="button" value="确定" id="btn"/><br/></p>
로그인 후 복사

사진:

사용자가 변경되면 그에 따라 해당 역할도 변경되며, 그 사람의 역할 정보도 변경되어 추가 저장됩니다. 추가 및 저장의 기본 아이디어는 해당 역할 정보를 모두 삭제하는 것입니다. 선택한 부분을 데이터베이스에 추가합니다.

먼저 기본 문자를 선택하도록 합니다.

<script>
  //选中默认角色
    function xuan()
    {
        var uid = $("#user").val();
        $.ajax({
            url:"chuli.php",
            data:{uid:uid,type:0},
            type:"POST",
            dataType:"TEXT",
            success:function(data)
            {

                var juese = data.trim().split("|");
                //拆分完全都变成代号
                var ck = $(".ck");
                ck.prop("checked",false);

                for(var i=0;i<ck.length;i++)
                {
                    //便利所有的列表
                    if(juese.indexOf(ck.eq(i).val())>=0)
                    {
                        ck.eq(i).prop("checked",true);
                    }
                }
            }
        });
    }

</script>
로그인 후 복사

처리 페이지를 작성합니다.

<?php
include ("../db.class.php");
$db = new db();
$type = $_POST["type"];
switch ($type)
{
    case 0:
        $uid = $_POST["uid"];
        $sql = "select jid from qxyhzw WHERE uid=&#39;{$uid}&#39;";
        echo $db->strQuery($sql);
break;
}
로그인 후 복사

최종 결과를 살펴보겠습니다. 로그인에 성공하면 홈페이지에 들어가게 되는데, 로그인에 실패하면 오류가 뜹니다

다시 저장 버튼:

<script>//当用户变化的时候去选中相应角色
        $("#user").change(function(){
            xuan();
        })        //点击确定保存角色信息
        $("#btn").click(function(){            var uid = $("#user").val();            //找到用户名
            var juese = "";//           找到角色代号
            var ck = $(".ck");            //找到所有的checked
            for(var i=0;i<ck.length;i++)
            {//                遍历他
                if(ck.eq(i).prop("checked"))
                {//                    如果他选中了,两个参数是改他的状态
                    //娶过来值;加个|分割一下
                    juese += ck.eq(i).val()+"|";
                }
            }
            juese = juese.substr(0,juese.length-1);//            去掉最后的|            $.ajax({
                url:"chuli.php",
                data:{uid:uid,juese:juese,type:1},
                type:"POST",
                dataType:"TEXT",
                success:function(data){
                    alert("修改成功");
                }
            });

        })
    });</script>
로그인 후 복사

페이지 처리:

<?php
include ("../db.class.php");
$db = new db();
$type = $_POST["type"];

switch ($type)
{ 
   case 1:
        $uid = $_POST["uid"];
        $juese = $_POST["juese"];
        //        首先全部删掉里面的职位
        $sdel = "delete from qxyhzw WHERE uid = &#39;{$uid}&#39;";
        $db->Query($sdel,0);
        //拆分取到的字符串
        $arr= explode("|",$juese);
        foreach ($arr as $v)
        {
            $sql = "insert into qxyhzw VALUES (&#39;&#39;,&#39;{$uid}&#39;,&#39;{$v}&#39;)";
            $db->query($sql,0);
        }
        echo "ok";
        break;
}
로그인 후 복사

효과 보기:

기본적으로 캐릭터가 선택됩니다.

변경 후 저장 선택:

페이지 요약 코드 관리:




    无标题文档
    

用户与角色管理

请选择用户
请选择角色 Query($sjs); foreach ($ajs as $v) { echo "{$v[1]} "; } ?>
</body>
로그인 후 복사

페이지 처리 전체 코드:

<?php
include ("../db.class.php");
$db = new db();
$type = $_POST["type"];

switch ($type)
{
    case 0:
        $uid = $_POST["zhang"];
        $sql = "select jid from qxyhzw WHERE uid=&#39;{$uid}&#39;";
        echo $db->strQuery($sql);
break;
    case 1:
        $uid = $_POST["zhang"];
        $juese = $_POST["juese"];
        //        首先全部删掉里面的职位
        $sdel = "delete from qxyhzw WHERE uid = &#39;{$uid}&#39;";
        $db->Query($sdel,0);
        //拆分取到的字符串
        $arr= explode("|",$juese);
        foreach ($arr as $v)
        {
            $sql = "insert into qxyhzw VALUES (&#39;&#39;,&#39;{$uid}&#39;,&#39;{$v}&#39;)";
            $db->query($sql,0);
        }
        echo "ok";
        break;
}
로그인 후 복사

3. 로그인 페이지:

디스플레이는 매우 간단합니다. 🎜>

<form action="drcl.php" method="post">
    <p>帐号:<input type="text" name="zhang"/></p>
    <p>密码:<input type="text" name="mi"/></p>
    <input type="submit" value="登入"/></form>
로그인 후 복사

로그인 처리 쓰기

<?php
session_start();
include ("../db.class.php");
$db = new db();
$zhang = $_POST["zhang"];
$mi = $_POST["mi"];
$sql = "select mi from qxyh WHERE zhang = &#39;{$zhang}&#39;";$mm = $db->strQuery($sql)>0;
if($mm = $mi && !empty($mi)){    
    $_SESSION["zhang"] = $zhang;    
    header("location:chaxun.php");
}//else
//{
//    echo "登入失败";
//}
로그인 후 복사

메인 페이지로 이동, 메인 페이지 코드:

사람마다 메인페이지가 다릅니다

<body><h1>主页面</h1>
로그인 후 복사
<?php
session_start();
include ("../db.class.php");
$db = new db();$zhang = "";
if(empty($_SESSION["zhang"]))
{    
header("location:qx_dr.php"); exit;
}//登入者用户名
    $zhang = $_SESSION["zhang"];//根据用户名查角色$sql = "select jid from qxyhzw WHERE uid = &#39;{$zhang}&#39;";$aql = $db->Query($sql);//根据角色代号查功能代号$attr = array();//定义一个存放功能代号的数组foreach ($aql as $v)
{   $jsid = $v[0];// 角色代号
    $ssql = "select rid from qxgnzw WHERE jid=&#39;{$jsid}&#39;";    $aaql = $db->strQuery($ssql);//拆分
    $adai = explode("|",$aaql);    foreach ($adai as $h)
    {       array_push($attr,$h);
    }
}$attr = array_unique($attr);//去重
//显示foreach ($attr as $k)
{    $ql = "select * from qxgn WHERE code = &#39;{$k}&#39;";    
$arr = $db->Query($ql);    arr[0][0];    $arr[0][1];    echo "<p code=&#39;{$arr[0][0]}&#39;>{$arr[0][1]}</p>";
}?>
로그인 후 복사
</body>
로그인 후 복사

 

 

用php的用户体验不好,最好还是得用ajax

위 내용은 PHP 인사 권한 관리(RBAC)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿