tp5.1 Auth類實現權限管理

瞭解來這麼久權限控制權限的知識,卻不知道如何寫代碼,網上的代碼多數並沒有多少完整的源碼能提供參考。偶然看到官網的例子,現在終於也把源碼的實現也弄得明白了一點。

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,並且他是有權限訪問的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章