ThinkPHP下的RBAC許可權訪問理解【筆記】____PHP

來源:互聯網
上載者:User

流程:
總共有3張表,許可權,角色,管理員 其中角色表為中間串連紐帶

1.完善角色表,實現增刪改差,以及為角色指派許可權的功能,儲存許可權的ID與action controller在role表,方便後便用2.完善許可權表,實現增刪改查,分配對應的許可權3.完善管理員列表,分配對應的角色

原理:

問:left.html根據不同管理員身份顯示不同分類列表。答:根本--role表裡的role_auth_ids 進行判斷,根據SQL語句的IN欄位來查詢對應資料【若為管理員時,if判斷來繞開in操作,從而全部查詢出來】問:如何防止專業人員手動輸入URL來進入不是自己許可權的頁面。答:根本-- role表裡的 role_ath_ac欄位 在背景所有控制器中,繼承一個總控制器,在總控制器的構造方法進行動態判斷許可權【CONTROLLER_NAME,ACTION_NAME】是實現動態識別的關鍵

總結:

    role表是三個表的中間聯絡,也是實現不同管理員分權的關鍵。    關鍵性的查詢判斷,從分權的操作,role表主角,其他倆表輔助。
//-----右邊頁面為何手動輸入URL,存取權限外的頁面會提示無許可權。【AdminController.class.php/__contruct(){}】-----//1.若當前訪問的方法不再公用允許的方法內;2.若不是超級管理員;3.若不再該管理員角色許可權的允許的頁面內//則發出沒有許可權提示【$now_ac裡的兩個常量是關鍵,自動識別當前是哪個控制器下的方法】$now_ac =CONTROLLER_NAME."-".ACTION_NAME;$allow_ac = array('Index-left','Index-right','Index-head','Index-index','Manager-login','Index-modifypwd','Index-verifyImg');$auth_ac = $auth_ac[0]['role_auth_ac'];//從資料庫查詢出來的有許可權的頁面if(!in_array($now_ac,$allow_ac) && $_SESSION['mg_id'] !=1 && strpos($auth_ac,$now_ac) === false){            $this->error('沒有存取權限',U("right"));                             }
//------左部列表為何不同管理顯示不同的導航。【index.class.php/left(){}】------    //    //  查詢list巨集指令清單    //  @return 三維數組    //      $arr['p_list']  包含所有頂級列表的二維數組    //      $arr['c_list']  包含所有二級列表的二維數組    //      上述兩個組合成一個三維數組返回    //    function get_list(){        $mg = M('cms_manager');        $role = M('cms_role');        $role_id = $mg->field("mg_role_id")->where("mg_id=$_SESSION[mg_id] ")->find();        $auth_ids = $role->field("role_auth_ids")->where("role_id=$role_id[mg_role_id] ")->find();        $sql = "SELECT auth_id,auth_name FROM  cms_auth  WHERE  auth_level='0'";        if($_SESSION['mg_id'] !="1") $sql.= " and auth_id in ($auth_ids[role_auth_ids]) ";        $p_list = $mg->query($sql);        $sql = "SELECT auth_id,auth_pid,auth_name,auth_a FROM  cms_auth  WHERE  auth_level='1'";        if($_SESSION['mg_id'] !="1") $sql.= " and auth_id in ($auth_ids[role_auth_ids]) ";        $c_list = $mg->query($sql);        $all_list=array(                "p_list"=>$p_list,                "c_list"=>$c_list,            );        // show($all_list);exit;        return $all_list;    }
**一.rbac許可權管理  【必須等項目大體作完,最後來做】**    role base access (基於角色的存取權限控制)

sw_auth //許可權表

      `auth_id`     主鍵      `auth_name`   許可權名稱,      `auth_pid`    父id,值:對應最高許可權的ID,              它若是最高許可權則沒有,值為0【目的在於,方便下拉式功能表顯示,有個匹配,是誰的下拉式功能表】      `auth_c`      控制器,controller控制器 Goods ;      它若是最高許可權則沒有,值無【目的在防止直接存取URL突破許可權,規定你只能訪問它】      `auth_a`      操作方法,action  方法 showlist;      它若是最高許可權則沒有,值無【目的在防止直接存取URL突破許可權,規定你只能訪問它】      `auth_path`   全路徑:【使用者資訊排序使用】                              【目的在許可權管理LIST查看來排序,好看】          ① : 如果是頂級許可權,全路徑等於本記錄主索引值 (auth_id)          ② :如果不是頂級許可權,全路徑等於 "父級全路徑-(中恒線)本記錄主索引值" (auth_pid-auth_id)      `auth_level`  層級,                                                     【目的在於sql區分下拉式功能表時,誰是1級菜單,誰是2級菜單】            基本:0頂級許可權  1次頂級許可權  2次次頂級            許可權呈現縮排關係使用        許可權資料類比:
            insert into sw_auth values (1,'商品管理',0,'','',1,0);            insert into sw_auth values (2,'訂單管理',0,'','',2,0);            insert into sw_auth values (3,'廣告管理',0,'','',3,0);            insert into sw_auth values (4,'商品列表',1,'Goods','showlist',"1-4",1);            insert into sw_auth values (5,'添加商品',1,'Goods','add',"1-5",1);            insert into sw_auth values (6,'商品分類',1,'Goods','cate',"1-6",1);            insert into sw_auth values (7,'使用者評論',1,'User','comment',"1-7",1);            insert into sw_auth values (8,'訂單列表',2,'Order','showlist',"2-8",1);            insert into sw_auth values (9,'訂單列印',2,'Order','print',"2-9",1);            insert into sw_auth values (10,'添加訂單',2,'Order','add',"2-10",1);            insert into sw_auth values (11,'廣告列表',3,'Advert','showlist',"3-11",1);            insert into sw_auth values (12,'廣告位置',3,'Advert','position',"3-12",1);

sw_role //角色表

        `role_id`         主鍵        `role_name`       '角色名稱',        `role_auth_ac`    '模組-操作',關聯許可權的控制器、方法串連的資訊"Goods-showlist,Goods-add,Goods-cate"【目的在於,懂行人直接輸入URL訪問更多許可權】        `role_auth_ids`   外鍵'該角色的對應許可權ID',"1,4,5,6"             關聯許可權的主索引值用逗號串連的資訊(如果有上級許可權,也把上級許可權的id進行關聯)
            insert into sw_role values (1, '經理', "1,4,5,6","Goods-showlist,Goods-add,Goods-cate");            insert into sw_role values (2, '主管', "2,3,8,11","Order-showlist,Advert-showlist");
    **sw_admin //管理員表**        `mg_id`     主鍵        `mg_name`   管理員賬戶名        `mg_pwd`    管理員密碼        `mg_time`   上次登入時間,        `mg_role_id` 外鍵,角色id,二.通過類比好的資料進行程式開發    a)使用者登入系統,根據具體角色顯示,左邊許可權按鈕    b)在左邊顯示對應的許可權資訊        i.使用者登陸系統顯示許可權資訊$_SESSION['mg_id']        ii.根據SESSION['mg_id']資訊獲得角色資訊['role_id']        iii.根據['role_id']資訊獲得許可權列表資訊['auth_id,name']三.超級管理員不需要許可權控制admin    a)在Index/left方法裡邊,若為admin,則顯示全部許可權        if($_SESSION['mg_id'] != 1 ){$sql .= "  and auth_id in ($auth_ids)";}四.防止內行手輸入URL訪問更多許可權    加入判斷        1.使用者訪問的控制器和方法,必須和他對應的角色表裡的【ac資訊】比較        2.`role_auth_ac`若有你訪問的許可權,則訪問    因為是後台每一個頁面都要驗證,把它寫一個父類,把所有公用方法寫入它,讓所有後台方控制器繼承它        位置: Component\AdminController.class.php        注意:             1.一些公有的方法,不進行許可權限制            2.系統管理員,不進行許可權限制            3.只允許訪問角色對應的許可權    【好好看看if判斷的寫法,理解】維護三部分資料:角色,許可權,1.角色 Admin/Role/showlist    角色:顯示角色列表資訊,給角色指派許可權    在設定時,把已經有的許可權顯示出來2.許可權維護

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.