瞭解來這麼久許可權控制許可權的知識,卻不知道如何寫代碼,網上的代碼多數並沒有多少完整的源碼能提供參考。偶然看到官網的例子,現在終於也把源碼的實現也弄得明白了一點。 tp5框架的Auth類可以實現頁面的訪問許可權,還可以精確到頁面上的按鈕。頁面訪問主要靠rule表的name欄位。附加條件許可權主要看condi ...
瞭解來這麼久許可權控制許可權的知識,卻不知道如何寫代碼,網上的代碼多數並沒有多少完整的源碼能提供參考。偶然看到官網的例子,現在終於也把源碼的實現也弄得明白了一點。
tp5框架的Auth類可以實現頁面的訪問許可權,還可以精確到頁面上的按鈕。頁面訪問主要靠rule表的name欄位。附加條件許可權主要看condition欄位。
源碼下載:https://files.cnblogs.com/files/mzzone/D.zip,資料庫配置在database.php.資料庫名為tp5_db.
源碼是從官網的一篇許可權管理文章下的,他那裡提到了對節點(路由)進行許可權管理,但沒有具體源碼。又查閱了其他幾篇文章,加了一些代碼,
僅僅是實現了
1.除開放頁面,要求用戶登錄才能繼續訪問其他頁面。
2.規定哪些用戶可以訪問哪些頁面。
著重控制是訪問頁面的許可權,按鈕點擊是否有效的許可權官網的也有示例。
- 許可權控制分為幾個情況
// 1.首先判斷是否為超級管理員
// --管理員直接放行
// --非管理員再次判斷
// 2.如果是非管理員,再次判斷訪問的節點是否在開放的數組列表中
// --節點在屬於開放許可權,直接放行
// --節點不屬於開放許可權,再次判斷
// 3.不屬於開放許可權,判斷有沒有登錄
// --用戶已經登錄,繼續使用auth類檢查有無許可權
// -----用戶有許可權,直接放行
// -----用戶無許可權,可以選擇不做動作,也可以讓它跳轉到首頁。
// --用戶未登錄,提示並跳轉到登錄頁面。
- Auth類實現許可權控制的原理就是增加一個基礎控制器Base繼承Controller,其他需要進行許可權控制的控制器繼承Base。
- Base控制器中的_initialize方法就是這個技術點的核心了。凡是繼承自Base的控制器都會優先執行這個方法。
- 這裡面的過程分為幾個步驟,下麵是他的代碼及其圖解。
- 源碼放到根目錄之後,將sql導入資料庫,資料庫名為tp5_db,沒有的話,先新建一個。
<?php namespace app\index\controller; use think\Request; use think\Controller; use think\auth\Auth; class Base extends Controller { public function _initialize() { //獲得當前頁面的控制器 / 方法 $request=Request::instance(); $moudle=$request->module(); //獲取當前控制器名稱 $con=$request->controller(); //獲取當前控制器名稱 $action=$request->action(); //獲取當前方法名稱 // $this->assign(array( // 'con'=>$con, // 'action'=>$action, // )); $rules=$con.'/'.$action; //組合 控制器/方法 $auth=new Auth(); //實例化auth類 $notCheck=array('Index/index','Index/login','Index/dologin','Index/logout'); //都可以訪問的頁面 if(session('uid')!=2){ //不是超級管理員才進行許可權判斷 if(!in_array($rules,$notCheck)){ // 是否在開放許可權裡面 if(!session('uid')){ $this->error('請先登陸系統!','index/login'); } if(!$auth->check($rules,session('uid'))){ // 第一個參數 控制/方法 第二個參數:當前登陸會員的id $this->error('沒有許可權','index/index'); }; } } } }
- 未登錄用戶演示過程(首頁屬於開放許可權,未登錄用戶不能訪問index/addGoods節點)
- 未登錄用戶訪問addGoods
- 登錄用戶首頁
- 登錄用戶訪問addGoods,並且他是有許可權訪問的。