簡體   English   中英

Laravel 5.4管理員和用戶角色中間件

[英]Laravel 5.4 Middleware for Admin and User Role

我創建了兩個名為“ MustBeAdmin”和“ MustBeUser”的中間件,以確保根據用戶登錄名將它們重定向到正確的頁面並限制未經授權的內容。 目前,一切正常,重定向也很好。 但是我在后台寫的邏輯對我來說似乎是錯的,而且它仍然很奇怪。 如果我寫的邏輯至少對我來說是正確的,那么它似乎就不會按預期工作。

用戶表

id (1,2,3,...)
name
role (1,2,3,...)

角色表

id (1,2,3,...)
role (Student, Admin,...)

MustBeAdmin中間件

public function handle($request, Closure $next)
    {
        if($request->user()->role == 2)
        {
            return $next($request);
        }
        else
        {
            return redirect('/admin/users');
        }

    }

MustBeUser中間件:

public function handle($request, Closure $next)
    { 
        if($request->user()->role == 1)
        {
            return $next($request);
        }
        else
        {
            return redirect('/admin/users');
        }

    }

kernel.php

'admin' => \App\Http\Middleware\MustBeAdmin::class,
'user' => \App\Http\Middleware\MustBeUser::class,

如您所見,我已經在內核中注冊了中間件。

我得到的結果恰好是我所需要的,但是我懷疑中間件中的邏輯是否正確?

1 = Student
2 = Admin

如果您在MustBeAdmin中間件中看到我正在比較用戶角色是否為2(admin),則執行next($ request);在MustBeUser中間件中,我正在比較用戶角色是否為1(學生),然后執行next($ request),然后設置其他到/ Admin目錄。

我覺得錯了,您怎么看?

您沒有在中間件中檢查經過身份驗證的用戶的詳細信息。 中間件應類似於:

//for student 
public function handle($request, Closure $next)
{

    if ( Auth::check() && Auth::user()->role == 1 )
    {
        return $next($request);
    }

    return redirect('/admin');

}


//for admin 
public function handle($request, Closure $next)
{

    if ( Auth::check() && Auth::user()->role == 2 )
    {
        return $next($request);
    }

    return redirect('/student');

}

您應在此處查看有關同一主題的詳細答案

是的,可以在一個公共文件中處理。 這是代碼

public function handle($request, Closure $next)
{
    $user = User::find(Auth::id());
    $roles = [];
    foreach ($user->roles as $key => $value) {
        array_push($roles, $value->pivot->role_id);
    }

    $routeName = Route::getFacadeRoot()->current()->uri();
    $route = explode('/', $routeName);
    if ($route[0] == "teacher") {
        if (in_array(2, $roles)) {
            return $next($request);
        } else {
            return response('Unauthorized.', 401);
        }
    } elseif ($route[0] == "student") {
        if (in_array(1, $roles)) {
            return $next($request);
        } else {
            return response('Unauthorized.', 401);
        }
    } elseif ($route[0] == "admin") {
        if (Auth::user()->admin == 1) {
            return $next($request);
        } else {
            return response('Unauthorized.', 401);
        }
    } else {
        if (!Auth::user()) {
            if ($request->ajax()) {
                    return response('Unauthorized.', 401);
            } else {
                    return redirect()->guest('admin-panel/auth/login');
            }
        }
    }

    return $next($request);
}

您可以根據需要更改邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM