【TP5.1】使用者全許可權校驗流程(完善【TP5.1】Rbac設計)
阿新 • • 發佈:2018-12-24
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了');
}
}
}