如何将web.php中未经授权的用户重定向到登录页面?

问题描述 投票:0回答:1

我正在 Laravel 中创建自定义管理面板,并尝试为未经授权的用户重定向到登录页面。网上有很多关于它的帖子,但它们都是针对旧版本的 Laravel,我找不到 10 的任何内容。这是 web.php:

Route::middleware(['role:admin'])->prefix('admin')->group(function()
{
    Route::get('/', [App\Http\Controllers\Admin\HomeController::class, 'index'])->name('admin');

    Route::resource('games', App\Http\Controllers\Admin\PostController::class);

});

我应该在此处添加什么来将用户重定向到登录页面?

laravel authentication roles
1个回答
0
投票

我想你使用 Spatie\laravel-permissions 基于角色:管理中间件。

你必须制作自己的中间件,例如“IsAdmin”

php artisan make:middleware IsAdmin

然后在新中间件的handle()函数中编写授权逻辑。

hasRole() 方法来自 laravel-permissions 包,如果您有其他权限系统,请编辑此逻辑。

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class IsAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if ( $request->user()->hasRole('admin']) ) {
            return $next($request);
        }

        return redirect('/login');
    }
}

将新的中间件添加到您的路线中。此外,您还应该添加 Laravel auth 中间件来检查用户是否已通过身份验证。

use \App\Http\Middleware\IsAdmin;

Route::middleware(['auth', IsAdmin::class])->prefix('admin')->group(function()
© www.soinside.com 2019 - 2024. All rights reserved.