ホームページ  >  記事  >  バックエンド開発  >  PHPのRBAC権限の詳しい説明

PHPのRBAC権限の詳しい説明

小云云
小云云オリジナル
2018-03-22 10:16:382485ブラウズ

この記事では、主に PHP の RBAC 権限の詳細な説明を共有します。これが皆様のお役に立てれば幸いです。まず、権限管理に必要な機能を理解する必要があります:

(1)。指定メソッド

(2) ユーザーは複数のユーザーグループに存在可能

(3) ユーザーグループは指定コントローラーと指定メソッドを選択可能

(4) コントローラーとメソッドを追加可能

RBAC(Role-Based Access Control(role) -ベースのアクセス制御)、つまり、ユーザーはロールを通じて権限に関連付けられます。簡単に言うと、ユーザーには複数の役割があり、各役割には複数の権限があります。このようにして、「ユーザー-ロール-権限」認可モデルが構築されます。このモデルでは、通常、ユーザーとロールの間、およびロールと権限の間に多対多の関係が存在します。

1. データベース設計

最初にユーザーテーブル、ロールテーブル、関数テーブル:

接続テーブルのテーブル..次にロール関数テーブルとユーザーロールテーブル:

の 5 つのテーブルを作成します。

2. 管理者の管理ページ

(1)。ユーザー名とロール名をそれぞれ表示します

(2)。対応するチェックボックス

(3). ユーザーのロールを変更する場合は、まずユーザーの対応するロールテーブルとそのユーザーに関するすべての情報を削除し、次に取得したユーザー名とロールコードを追加します。

ドロップダウン リストを使用します: PHP クエリを埋め込んでトラバースし、ドロップダウン リストとして表示します

PHPのRBAC権限の詳しい説明

<select></select>

PHPのRBAC権限の詳しい説明

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

PHPのRBAC権限の詳しい説明


PHPのRBAC権限の詳しい説明

ロールを選択し、複数選択ボックス:

PHPのRBAC権限の詳しい説明

<p>请选择角色<?php $sjs = "select * from qxzw";$ajs = $db->Query($sjs);foreach ($ajs as $v)
{    echo "<input>{$v[1]} ";
}?>
</p>
<input>

PHPのRBAC権限の詳しい説明

写真:

ユーザーが変更されると、対応するロールもそれに応じて変更され、その人のロール情報も変更されます。追加と保存は、まずデータベースに人物を追加します。該当する役割情報をすべて削除し、選択した部分を取得してデータベースに追加します。

まずデフォルトのロールを選択させます:

<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>

処理ページを作成するには:

<?phpinclude ("../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>

処理中のページ:

<?phpinclude ("../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;
}

効果を確認してください:

デフォルトで選択されている文字:

管理ページの合計コード:

コードの表示

処理中のページのコード:

<?phpinclude ("../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>

ログイン処理の書き込み

<?phpsession_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>
<?phpsession_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のRBAC権限の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。