ThinkPHP RBAC官網的例子詳解

來源:互聯網
上載者:User

一直想學習RBAC,又看了官網的例子,又百度,沒找到合適的教程。所以就只能自己研究了,就拿官網的例子來說吧

think_access表

作用是看某個組是否有許可權訪問某個模組下的方法或者訪問某個模組,這個表少一個pid欄位,自己添加就可以了

think_node表,節點表

作用是把所有需要的模組,模組下的方法都添加進來管理,用這個也可以直接讀取成背景導航

name欄位是模組,方法的名稱,比如Index模組,index方法等,

pid,這個模組或者方法的父id,

level,層級,一般項目名是1,模組是2,方法是3

正常先添加項目名,pid為0,level為1,status肯定是1了

一般都有個預設的Index模組,Index模組下有預設的index方法,

所以,插入Index,pid為項目名的id,level為2,再插入index,pid為模組的id,level為3。

think_role為組的表

think_user(自己建的,可以用別的名稱,記得在設定檔裡改掉),使用者表

think_role_user是使用者表和組表的關聯。


接下來,在Lib下建立IndexAction,PublicAction,CommonAction


然後複製官網RBAC例子裡的Conf下的config.php中的內容到自己的項目裡,

關於RBAC所有的配置

'USER_AUTH_ON'              =>  true,

'USER_AUTH_TYPE'=>  2,// 預設認證類型 1 登入認證 2 即時認證

'USER_AUTH_KEY'             =>  'authId',// 使用者認證SESSION標記

'ADMIN_AUTH_KEY'=>  'administrator',

'USER_AUTH_MODEL'           =>  'User',// 預設驗證資料表模型,如果使用者表名稱不是User的話自己改

'AUTH_PWD_ENCODER'          =>  'md5',// 使用者認證密碼加密方式

'USER_AUTH_GATEWAY'         =>  '/Public/login',// 預設認證網關

'NOT_AUTH_MODULE'           =>  'Public',// 預設無需認證模組

'REQUIRE_AUTH_MODULE'       =>  '',// 預設需要認證模組

'NOT_AUTH_ACTION'           =>  '',// 預設無需認證操作

'REQUIRE_AUTH_ACTION'       =>  '',// 預設需要認證操作

'GUEST_AUTH_ON'             =>  false,    // 是否開啟遊客授權訪問

'GUEST_AUTH_ID'             =>  0,        // 遊客的使用者ID

'DB_LIKE_FIELDS'            =>  'title|remark',

'RBAC_ROLE_TABLE'           =>  'think_role',

'RBAC_USER_TABLE'           =>  'think_role_user',

'RBAC_ACCESS_TABLE'         =>  'think_access',

'RBAC_NODE_TABLE'           =>  'think_node',


然後在CommonAction中添加

function _initialize() {

       import('@.ORG.Util.Cookie');

       // 使用者權限檢查

       if (C('USER_AUTH_ON') && !in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE')))) {

           import('@.ORG.Util.RBAC');

           if (!RBAC::AccessDecision()) {

               //檢查認證識別號

               if (!$_SESSION [C('USER_AUTH_KEY')]) {

                   //跳轉到認證網關

                   redirect(PHP_FILE . C('USER_AUTH_GATEWAY'));

               }

               // 沒有許可權 拋出錯誤

               if (C('RBAC_ERROR_PAGE')) {

                   // 定義許可權錯誤頁面

                   redirect(C('RBAC_ERROR_PAGE'));

               } else {

                   if (C('GUEST_AUTH_ON')) {

                       $this->assign('jumpUrl', PHP_FILE . C('USER_AUTH_GATEWAY'));

                   }

                   // 提示錯誤資訊

                   $this->error(L('_VALID_ACCESS_'));

               }

           }

       }

這個的作用說白了就 檢查是否有許可權登入和是否有許可權訪問而已。

然後IndexAction繼承CommonAction

預設沒有登入或者沒有許可權會調轉到Public/login,Public直接看官網的例子把~應該沒問題。


最重要的是access表和node表,role表中的關係要弄清楚了,還有role,role_user,user表之間的關係。其實就這麼簡單。如果還有問題的話可以加群252799167,一起學習討論,新手一個,呵呵。

本文出自 “尛雷” 部落格,請務必保留此出處http://a3147972.blog.51cto.com/2366547/1213321

相關文章

聯繫我們

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