Laravel构造函数重定向


laravel constructor redirect

我有一个方法来检查用户的角色是否是管理员,如果不是,用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');
    }
}

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

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

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');

通过将其添加到上面的类来导入redirectuse Illuminate'Support'Facades'Redirect;

并使用return Redirect::to('login');