tp5.1 Auth類實現權限管理

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

tp5框架的Auth類能夠實現頁面的訪問權限,還能夠精確到頁面上的按鈕。頁面訪問主要靠rule表的name字段。附加條件權限主要看condition字段。sql

 

源碼下載:https://files.cnblogs.com/files/mzzone/D.zip,數據庫配置在database.php.數據庫名爲tp5_db.數據庫

源碼是從官網的一篇權限管理文章下的,他那裏提到了對節點(路由)進行權限管理,但沒有具體源碼。又查閱了其餘幾篇文章,加了一些代碼,數組

僅僅是實現了session

1.除開放頁面,要求用戶登陸才能繼續訪問其餘頁面。app

2.規定哪些用戶能夠訪問哪些頁面。框架

着重控制是訪問頁面的權限,按鈕點擊是否有效的權限官網的也有示例。ui

  • 權限控制分爲幾個狀況

// 1.首先判斷是否爲超級管理員
// --管理員直接放行
// --非管理員再次判斷
// 2.若是是非管理員,再次判斷訪問的節點是否在開放的數組列表中
// --節點在屬於開放權限,直接放行
// --節點不屬於開放權限,再次判斷
// 3.不屬於開放權限,判斷有沒有登陸
// --用戶已經登陸,繼續使用auth類檢查有無權限
// -----用戶有權限,直接放行
// -----用戶無權限,能夠選擇不作動做,也可讓它跳轉到首頁。
// --用戶未登陸,提示並跳轉到登陸頁面。this

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

相關文章
相關標籤/搜索