PHP人事権限管理(RBAC)の導入方法を詳しく解説

黄舟
リリース: 2023-03-06 21:34:01
オリジナル
20853 人が閲覧しました

権限管理について話す前に、まず権限管理がどのような機能を持っているかを知っておく必要があります:

( 1). ユーザーは指定されたコントローラーと指定されたメソッド

にのみアクセスできます (2) ユーザーは複数のユーザーグループに存在することができます

(3) ユーザーグループを選択して指定することができます コントローラー、指定されたメソッド

(4) コントローラーとメソッドを追加できます

RBAC (Role-Based Access Control) は、ロールを通じてユーザーに権限を関連付けるだけです。これでは、ユーザーには複数のロールがあり、各ロールには複数の権限があると言われます。このモデルでは、一般にユーザーとロール、およびロールと権限の間に多対多の関係が存在します。

1. データベース設計

最初にユーザーテーブル、ロールテーブル、関数テーブルを5つ書きます:

テーブルを接続するテーブル...ロールメニューとユーザーロールテーブル:

2. 管理者の管理ページ

(1) それぞれユーザー名とロール名を表示します。 ). ドロップダウンのユーザー名の変更に応じて、対応するチェックボックスでロールを変更します

(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"/>
ログイン後にコピー

View Code 処理ページの合計コード:

<?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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート