1. 程式人生 > >【TP5.1】使用者全許可權校驗流程(完善【TP5.1】Rbac設計)

【TP5.1】使用者全許可權校驗流程(完善【TP5.1】Rbac設計)

author:咔咔

wechat:fangkangfk

1.首先是使用者登入校驗

2.使用者登入後

首先通過這部分判斷登入使用者,如果是系統管理員記錄使用者許可權

     if ($user->is_system == 1) { 

             // 計入使用者的許可權

              SC::setIsSystem(true);

             //  計入使用者的許可權

              SC::setUserRole(Rbac::getRoleModule($user->role_id));

          } else {

              SC::setIsSystem(false);

          }

在專案訪問的時候

因為中介軟體配置的是全域性的,所以必然會進到AuthMiddleware這個中介軟體

在這裡我們裡邊有個test的單元測試模組這裡需要規避一下

方法的解釋:

  1.1checkWhite()

白名單列表

  1.2onlyCheck() 方法用來校驗唯一登陸的(不懂得去看,這塊就不解釋了) 

  1.3通過 OnlyLogin::onlyCheck() 進行使用者只允許在一個地方登入校驗判斷,然後再通過 Rbac類中的check方法 做許可權校驗

做驗證之前,首先通過初始化的建構函式對於使用者請求url進行初始化操作,同時定義好需要校驗的許可權模組authModule

然後在獲取系統角色許可權列表(放置到使用者登入成功後存入使用者的角色引數中)

具體校驗方法就是check()方法 

$this->module 是使用者訪問當前的模組

$this->authModule 是自己規定需要校驗的模組

判斷使用者訪問的模組是否需要許可權的校驗 如果不在規定模組裡面那麼就允許訪問

checkModule()具體的驗證使用者許可權方法 

這裡有一個SC::getUserRole()方法

這個方法是用來獲取使用者許可權列表的,是在登入成功後存入的

許可權驗證完成

中介軟體原始碼:

<?php

namespace app\http;

use SC,OnlyLogin,Rbac,Log;

class AuthMiddleware
{
    public function handle($request, \Closure $next)
    {
        //規避單元測試模組的正常訪問
        if(request()->module() == 'test'){
            return $next($request);
        }
        /**
         * 使用中介軟體進行白名單判斷,判斷使用者是否許可權需要校驗
         * Rbac::checkWhite()返回的是boolean
         * true不需要校驗直接返回請求
         */
        if(Rbac::checkWhite()){
            return $next($request);
        }

        /**
         * 檢測使用者是否是唯一登入
         */
         if (OnlyLogin::onlyCheck()) {
             Log::write('唯一登入進入了');
             /**
              * 檢測使用者是否有許可權
              */
             if(Rbac::check()){
                 Log::write('許可權不需要校驗');
                 return $next($request);
             }else{
                 return redirect($request->module().'/login/login');
             }
         }else{
             return redirect('你被T了');
         }
    }
}