php人事権限管理(RBAC)

迷茫
リリース: 2023-03-06 22:10:02
オリジナル
1678 人が閲覧しました

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

(1) ユーザーは指定されたコントローラーと指定されたメソッドにのみアクセスできます

(2) ユーザーは複数のユーザーで存在できます。 groups

by T.

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

1. データベース設計

最初にユーザーテーブル、ロールテーブル、関数テーブルの 5 つのテーブルを作成します。 接続表 Table..次に、ロールメニューとユーザーロールテーブルです:

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)。ユーザーのロールを変更する場合は、まずユーザーの対応するロールテーブルとそのすべての情報を削除します。 userを入力し、取得したユーザー名とロールコードを新たに追加します。

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

ロールを選択し、複数選択ボックスを使用します:

<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;
}
ログイン後にコピー

3. ログインページ:

表示は非常にシンプルです:




    无标题文档
    

用户与角色管理

请选择用户
请选择角色 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;
}
ログイン後にコピー

メインページ、ホームページにジャンプ フェイスコード:

ホームページは人それぞれ違います

<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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート