iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

0

登入會員中介層

在購買商品的路由中,需要限制為需要登入使用者,才可以進行存取的中介層去做權限控制,所以可以建立一個AuthUserMiddleware的中介層,幫我們做這個存取權限控制,建立完中介層檔案後,會在app/Http/Middleware/AuthUserMiddleware.php路徑中看到這個檔案

php artisan make:middleware AuthUserMiddleware
https://ithelp.ithome.com.tw/upload/images/20191015/20105694zITASdwyNH.png

我們要限制登入使用者才可以存取購買商品這個路由,所以中介層的邏輯會長得像這樣

app/Http/Controllers/Middleware/AuthUserMiddleware.php

<?php

namespace App\Http\Middleware;

use App\Shop\Entity\User;
use Closure;

class AuthUserMiddleware
{
    //處理請求
    public function handle($request, Closure $next)
    {
        //預設不允許存取
        $is_allow_access = false;
        //取得會員編號
        $user_id = session()->get('user_id');

        if(!is_null($user_id))
        {
            //Session有會員編號,允許存取
            $is_allow_access = true;
        }

        if(!$is_allow_access)
        {
            //若不允許存取,重新導向至首頁
            return redirect()->to('/');
        }

        //允許存取,繼續做下個請求的處理
        return $next($request);
    }
}

判斷的邏輯與登入使用者且為管理者的中介層類似,只是在這裡僅判斷是否為登入會員,不判斷會員的身分,所以當Session中有會員編號,則表示為登入會員,再將此請求設定為允許存取資料的請求。

當最後資料處理結果,判斷這個請求是不允許存取資料的狀況時(非登入會員),則會將這個請求重新導向至登入頁,中斷後面所有的資料處理。但是當會員已登入,會設定此請求為允許存取資料的請求,所以會繼續將目前的請求,丟給下一個處理請求的函式做處理,可能是下一個中介層或是控制器。

在中介層邏輯處理完成後,一樣到app/Http/Kernel.php檔案中註冊此中介層,並將此中介層名稱命名為user.auth,這樣就可以完成中介層的註冊設定。

app/Http/Kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    //應用程式中介層
    protected $routeMiddleware = [
        'user.auth' => \App\Http\Middleware\AuthUserMiddleware::class,
        'user.auth.admin' => \App\Http\Middleware\AuthUserAdminMiddleware::class,
        // ...以下省略...
    ];

}

在註冊設定完中介層之後,可以在路由檔案中routes/web.php,指定購買商品這個路由需要經過user.auth中介層

routes/web.php

<?php
//商品
Route::group(['prefix' => 'merchandise'], function(){
    //指定商品
    Route::group(['prefix' => '{merchandise_id}'], function(){
        //購買商品
        Route::post('/buy', 'MerchandiseController@merchandiseItemBuyProcess')->middleware(['user.auth']);
    });
});
?>

在設定完這兩個中介層後,當你再次存取商品資料新增商品管理清單檢視商品單品編輯頁面檢視頁面商品單品資料修改購買商品這五個路由時,你會發現當你沒有登入或者權限不夠時,你都會被重新導向到首頁,再也無法對這些頁面做存取了,這樣表示我們就成功完成了中介層的權限判斷了。


上一篇
[Day 36] Laravel實作 - 商品管理與瀏覽(三)
下一篇
[Day 38] Laravel實作 - 商品管理與瀏覽(五)
系列文
Laravel從入門到放棄…………原生PHP (疑?48

尚未有邦友留言

立即登入留言