YII框架中的srbac許可權管理模組的安全與使用(版本是1.1.20)
0x01 前言
-
srbac的原理:
YII框架的srbac模組是一個專門管理許可權的一個模組,那它是怎麼管理許可權的呢。我們知道YII框架的網頁顯示是由控制器實現的,控制器繼承父類CController和Controller,每個控制器中又有許多方法,就是以action開頭的執行動作的函式,函式之中可以使用render渲染檢視。srbac模組就是控制這個action開頭的執行動作的函式來實現許可權控制的。而且這個許可權控制是基於登陸的使用者來完成的(登陸使用者的記錄用的是Yii::app()->user->login()這個方法實現的)。什麼使用者能訪問什麼樣的action開頭執行動作的模組。這個就是srbac模組的原理
-
srbac的實現:
YII框架srbac模組是如何實現的呢,實際上是通過3個東西來確定的呢?使用者、角色、任務這三個東西決定的,使用者就是登陸YII框架的使用者,角色可以是在srbac的管理頁面中的新建的(srbac模組中有一個超級管理員角色Authority,是預設的,使用者要想登陸srbac模組必須要有這個許可權),還有一個就是任務,任務當中放的就是控制器中的action方法(就是剛才上面說的)。比如我有個action方法actionIndex(瀏覽器中的訪問方式是:控制器/index),我把這個方法放到一個任務中(假如這個任務的名字是project),之後我新建一個角色叫admin,之後我把project放到admin角色中,最後將admin角色賦予給我要的使用者,假如有一個使用者叫cxy,我把admin角色賦給他。之後你們覺得我在登陸了cxy使用者,能不能訪問這個這個actionIndex方法。答案是能,邏輯圖就是cxy(使用者)->admin(角色)->project(任務)->actionIndex(方法)。
0x02 srbac配置方法
1.首先新建一個專案,我定義為srbac
2.安裝成功
3.在資料庫中新建一個表user,這個表馬上配置的時候需要用,這個裡面新建了好幾個使用者
4.使用gii模組(刪除註釋,這裡我建立了一個admin模組方便以後操作),配置資料庫(這個根據自己配),如果這個不會的話…
5.將下載的srbac模組複製貼上到modules資料夾中(我下載的版本是srbac_1.3beta,不會下載的可以到我部落格資源區裡面下載)
6.修改protected/config/main.php檔案紅線為新增的
'import'=>array( 'application.models.*', 'application.components.*', 'application.modules.srbac.controllers.SBaseController', ),
'srbac' => array(
'userclass'=>'User', //使用者表ActiveRecord模型
'userid'=>'Id', //使用者表主鍵欄位
'username'=>'username', //使用者名稱
'delimeter'=>'@', //模組中新增operation時,插入Srbac之後的定界符。預設是:-
'debug'=>true, //預設是 false,只有當debug為false時,Srbac模組才能生效
'pageSize'=>10, //管理授權項頁面顯示的授權項個數,預設是15
'superUser' =>'Authority', //建議將此名稱改為超級管理員名稱,有利於角色的統一
'css'=>'srbac.css',//路徑別名,目錄為srbac/css/srbac.css
//'layout'=>'application.views.layouts.main', //佈局檢視檔案別名,預設為application.views.layouts.main
// 'layout'=>'application.modules.srbac.views.layouts.layoutSrbac',
'notAuthorizedView'=>'srbac.views.authitem.unauthorized', //使用者訪問沒有授權頁面顯示的檢視
'alwaysAllowed'=>array(//允許任何人訪問的操作(動作方法)
'SiteLogin','SiteLogout','SiteIndex',
'SiteError', 'SiteContact'
),
'userActions'=>array('Show','View','List'), //分配給使用者的預設操作
'listBoxNumberOfLines' => 15,//列表框的行數,預設是10
'imagesPath' => 'srbac.images', //Srbac模組中相關圖片儲存路徑
'imagesPack'=>'noia', //模板名稱,noia或tango
'iconText'=>true, //圖示旁邊是否顯示文字,預設是false
'header'=>'srbac.views.authitem.header', //頭部資訊
'footer'=>'srbac.views.authitem.footer', //底部資訊
'showHeader'=>true, //是否顯示頭部資訊,預設是:false
'showFooter'=>true, //是否顯示底部資訊,預設是:false
'alwaysAllowedPath'=>'srbac.components', //總是允許訪問:元件路徑
),
PS:注意這裡debug一定要設定為true,因為上面我說到只有使用者有超級管理員才能訪問這個srbac這個模組,所以我們開啟debug除錯模式,這樣任何使用者都可以訪問srbac這個模組
'authManager'=>array(
// 類SDbAuthManager在srbac模組中的路徑(別名),注意大小寫
'class'=>'application.modules.srbac.components.SDbAuthManager',
// 使用的資料庫的元件名
'connectionID'=>'db',
// 下面是3個數據表,後面再說每個表的作用
// The itemTable name (default:authitem)
'itemTable'=>'items',
// The assignmentTable name (default:authassignment)
'assignmentTable'=>'assignments',
// The itemChildTable name (default:authitemchild)
'itemChildTable'=>'itemchildren',
),
6.建立srbac模組需要使用的表User.php,為什麼表的名字為User,請看上面配置的userclass這個選項
7.點選安裝之後,登陸srbac模組
PS:這裡設定中文頁面的方法首先更改main.php檔案(別問我在哪裡,上面有),新增如下一行
並且在srbac這個模組中的message資料夾中將zh資料夾更改為zh_cn,這樣就能實現中文顯示了
以上就是安裝srbac模組的方式
0x03 srbac模組的使用方法
1.隨便新建一個控制器CxyController.php(這裡注意繼承的是SBaseController,SBaseController繼承Controller),這裡控制器有3個方法
2.之後進入srbac頁面進行配置,上面講過action執行的方法需要存放在任務之中,那怎麼匯入action的方法呢
3.上面的紅線中的方法就是我們剛剛建立的方法,這裡會自動識別(因為繼承了SBaseController這個類,類中會自動記錄)
4.上面那張圖可以看到這個就是我們剛才新增的方法,之後新增兩個任務,一個project1和project2
5.新建兩個角色test1和test2
6.資料庫多建幾個使用者
7.之後將YII系統的登陸系統連線到我們的資料庫中,更改protected\components\UserIdentity這個檔案,尤其是圖中劃線的這個方法一定要寫。這個主要是什麼意思呢,就是系統登陸的時候用的是我們的資料庫中的賬號和密碼。
8.剛才我們的控制器中不是有3個方法嗎,一個是index,一個是user,一個是admin之後我們設定只有admin使用者能訪問admin方法,只有demo使用者能訪問user方法,index方法先不設定。
9.配置完畢,之後設定debug為false就是不除錯了
10.之後訪問index.php?r=cxy/user,就是訪問user方法,訪問的時候會自動跳到登陸介面,首先登陸admin測試
11.顯示無權訪問,因為我們剛才配置的時候是指定admin只能訪問admin這個控制器的方法,那麼我們訪問admin這個控制器的方法
反之登陸使用者demo,在測試一下
0x04 總結
寫了這麼多手都酸了,以上就是srbac的原理和如何使用,不想說了…
PS:如果認為我這個部落格有什麼問題或者有修改意見的,請一定要告訴我,非常感謝(我的郵箱[email protected])