PHP的RBAC許可權詳解

來源:互聯網
上載者:User
本文主要和大家分享PHP的RBAC許可權詳解,希望能協助到大家,首先我們應該Crowdsourced Security Testing道許可權管理要有哪些功能:

  (1)、使用者只能訪問,指定的控制器,指定的方法

  (2)、使用者可以存在於多個使用者組裡

  (3)、使用者組可以選擇,指定的控制器,指定的方法

  (4)、可以添加控制器和方法

RBAC(Role-Based Access Control,角色型存取控制),就是使用者通過角色與許可權進行關聯。簡單地說,一個使用者擁有若干角色,每一個角色擁有若干許可權。這樣,就構造成“使用者-角色-許可權”的授權模型。在這種模型中,使用者與角色之間,角色與許可權之間,一般者是多對多的關係。

1.資料庫的設計

寫五張表,首先:使用者表、角色表、功能表:

串連表的表..再來就是角色功能表與使用者角色表:

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='{$v[0]}'>{$v[2]}</option>";    }    ?>

</select>

選擇角色,用多選框:

<p>請選擇角色<?php$sjs = "select * from qxzw";$ajs = $db->Query($sjs);foreach ($ajs as $v){    echo "<input type='checkbox' value='{$v[0]}' class='ck'/>{$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>

來寫他的處理頁面:

<?phpinclude ("../db.class.php");$db = new db();$type = $_POST["type"];switch ($type){    case 0:        $uid = $_POST["uid"];        $sql = "select jid from qxyhzw WHERE uid='{$uid}'";        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 = '{$uid}'";        $db->Query($sdel,0);        //拆分取到的字串        $arr= explode("|",$juese);        foreach ($arr as $v)        {            $sql = "insert into qxyhzw VALUES ('','{$uid}','{$v}')";            $db->query($sql,0);        }        echo "ok";        break;}

看效果:

預設選中角色;

更改以後選擇儲存:

管理頁面總代碼:

View Code

處理頁面總代碼:

<?phpinclude ("../db.class.php");$db = new db();$type = $_POST["type"];switch ($type){    case 0:        $uid = $_POST["zhang"];        $sql = "select jid from qxyhzw WHERE uid='{$uid}'";        echo $db->strQuery($sql);break;    case 1:        $uid = $_POST["zhang"];        $juese = $_POST["juese"];        //        首先全部刪掉裡面的職位        $sdel = "delete from qxyhzw WHERE uid = '{$uid}'";        $db->Query($sdel,0);        //拆分取到的字串        $arr= explode("|",$juese);        foreach ($arr as $v)        {            $sql = "insert into qxyhzw VALUES ('','{$uid}','{$v}')";            $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 = '{$zhang}'";$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 = '{$zhang}'";$aql = $db->Query($sql);//根據角色代號查功能代號$attr = array();//定義一個存放功能代號的數組foreach ($aql as $v){   $jsid = $v[0];// 角色代號    $ssql = "select rid from qxgnzw WHERE jid='{$jsid}'";    $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 = '{$k}'";    $arr = $db->Query($ql);    $arr[0][0];    $arr[0][1];    echo "<p code='{$arr[0][0]}'>{$arr[0][1]}</p>";}?>
</body>

用php的使用者體驗不好,最好還是得用ajax。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.