1. 程式人生 > >YII框架中的srbac許可權管理模組的安全與使用(版本是1.1.20)

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]