了解來這么久權限控制權限的知識,卻不知道如何寫代碼,網上的代碼多數并沒有多少完整的原始碼能提供參考,偶然看到官網的例子,現在終于也把原始碼的實作也弄得明白了一點,
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,并且他是有權限訪問的,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93444.html
標籤:PHP
上一篇:驗證碼圖片類的撰寫
下一篇:網站呼叫qq第三方登錄
