温馨提示:本文翻译自stackoverflow.com,查看原文请点击:php - laravel constructor redirect
laravel-5 php redirect

php - laravel构造函数重定向

发布于 2020-04-06 00:02:38

我有一种检查用户角色是否为管理员的方法,如果不是,请使用重定向他们return redirect('/')->send();如何检查用户角色并重定向用户,而不显示页面并等待重定向?

我的控制器:

class AdminController extends Controller
{
    public function __construct()
    {
        if (Auth::check())
        {
            $user = Auth::user();
            if ($user->role != 'admin')
            {
                return redirect('/')->send();
            }
        }
        else
        {
            return redirect('/')->send();
        }
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return View('admin/index');
    }
}

查看更多

提问者
lock
被浏览
40
Brotzka 2016-07-04 13:31

创建自己的中间件这是一个例子。在我的示例中,我在一个单独的模型中有几个用户组。您必须根据需要更改代码。

通过终端/控制台创建中间件:

php artisan make:middleware UserGroupMiddleware

可以在以下位置找到创建的中间件类 app/Http/Middleware/UserGroupMiddleware.php

您的中间件中需要以下代码:

namespace App\Http\Middleware;

use Closure;
use App\User;
use App\Usergroup;

class UserGroupMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $group)
    {
        if($request->user() !== NULL){
            $userGroupId = $request->user()->group;
            $userGroup = Usergroup::find($userGroupId);

            if($userGroup->slug === $group){
                return $next($request);
            }
        }
        // Redirect the user to the loginpage
        return redirect('/login');
    }
}

现在您必须在以下位置注册该中间件app/Http/Kernel.php

protected $routeMiddleware = [
    // other middlewares

    // Custom Middleware
    'group' => \App\Http\Middleware\UserGroupMiddleware::class
];

最后,您需要将中间件连接到您的路由:

Route::group(['middleware' => 'group:admin'], function(){
    // Routes for admins, e.g.
    Route::get('/dashboard', 'SomeController@dashboard');
});

// Or for a single route:
Route::get('/dashboard', ['middleware' => 'group:admin'], function(){
    return view('adminbereich.dashboard');
});

请记住,您可以通过以下方式传递多个中间件:

Route::get('/some/route', ['middleware' => ['group:admin', 'auth']], 'SomeController@methodXYZ');