> 백엔드 개발 > PHP 튜토리얼 > PHP 인사권한관리(RBAC) 구현방법에 대한 자세한 설명

PHP 인사권한관리(RBAC) 구현방법에 대한 자세한 설명

黄舟
풀어 주다: 2023-03-06 21:34:01
원래의
20902명이 탐색했습니다.

권한 관리에 대해 이야기하기 전에 권한 우선 관리에 필요한 기능:

(1) 사용자는 지정된 컨트롤러 및 지정된 메소드

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

 (3) 사용자 그룹 선택, 컨트롤러 지정, 방식 지정 가능

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

RBAC(Role-Based Access Control, 역할 기반 액세스 제어), 즉 사용자는 역할과 연관될 수 있습니다. 간단히 말해서, 사용자는 여러 역할을 가지며 각 역할에는 여러 권한이 있습니다. 이러한 방식으로 "사용자 역할 권한" 인증 모델이 구성되며 일반적으로 역할과 권한 사이에 다대다 관계가 있습니다.

1. 데이터베이스 디자인

5개의 테이블을 먼저 작성합니다. 사용자 테이블, 역할 테이블, 함수 테이블:

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

2. >

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

(2). 이름, 해당 확인란

에서 역할을 변경합니다. (3) 사용자 역할을 수정할 때 먼저 해당 사용자의 해당 역할 테이블을 만들고 모든 정보를 삭제합니다. 그런 다음 획득한 사용자 이름과 역할 코드를 추가하세요.

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

.

<select id="user">
로그인 후 복사
  <?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>";
    }    
    ?>
로그인 후 복사
</select>
로그인 후 복사

문자를 선택하고 다중 선택 상자를 사용하세요.

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

사진:

사용자가 변경되면 그에 따라 해당 역할도 변경되며, 그 사람의 역할 정보도 변경, 추가, 저장된다는 ​ 기본 아이디어입니다. 추가 및 저장은 먼저 해당 인물을 데이터베이스에 넣는 것입니다. 모든 문자 정보를 삭제한 다음 선택한 부분을 가져와서 데이터베이스에 추가합니다. 먼저 기본 문자를 선택하게 합니다. 🎜><. 🎜>

<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;
}
로그인 후 복사

코드 보기

처리 페이지의 전체 코드:




    无标题文档
    


用户与角色管理

请选择用户 <select id="user"> Query($sql); foreach ($arr as $v) { echo ""; } ?> </select>

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

3. 로그인 페이지:

표시는 매우 간단합니다.

<?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;
}
로그인 후 복사

쓰기 로그인 처리

<?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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿