Laravel 阻止特定于角色的用户访问路由

Laravel 阻止特定于角色的用户访问路由,laravel,laravel-5,routes,laravel-authorization,Laravel,Laravel 5,Routes,Laravel Authorization,我有两个角色,分别是admin和user。现在,登录时,管理员转到仪表板路径,而用户转到主页。当用户登录并将url更改为http://127.0.0.1:8000/dashboard它可以访问管理员面板,我不希望这样。我怎样才能做到这一点 另外,我对Laravel不熟悉使用中间件管理路由或控制器内部 像这样: Route::put('post/{id}', function ($id) { // })->middleware('role:editor'); 或 或者在控制器内部,如下所示

我有两个角色,分别是
admin
user
。现在,登录时,管理员转到
仪表板
路径,而用户转到
主页
。当用户登录并将url更改为
http://127.0.0.1:8000/dashboard
它可以访问管理员面板,我不希望这样。我怎样才能做到这一点


另外,我对Laravel不熟悉

使用中间件管理路由或控制器内部 像这样:

Route::put('post/{id}', function ($id) {
//
})->middleware('role:editor');

或者在控制器内部,如下所示:

public function __construct()
{
    $this->middleware(['auth', 'admin'])->except(['index']);
}

或者您可以使用中间件角色。

这方面的良好实践是使用中间件。 为管理员和用户创建中间件(我只为管理员创建中间件,您也可以为用户创建中间件):

现在,如果您使用“routes/web.php”中的所有请求(实际上我认为是这样),那么您可以为管理员使用如下路由:

// USER ROUTES
Route::get('/', 'FrontController@main')->name('main');

// ADMIN ROUTES
Route::group([
    'as' => 'admin.',
    'middleware' => [ 'Admin' ],
], function () {
    Route::get('dashboard', 'AdminController@dashboard');
});
通过“php artisan配置:缓存”刷新缓存。
试试看

Auth::check()
的用途是什么?好的,我现在就开始工作了,明天将尝试测试一切是否正常。很高兴第一次尝试就成功了!谢谢!我一定会记住这一点!
<?php

namespace App\Http\Middleware;

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

class AdminMiddleware
{
    public function handle($request, Closure $next)
    {
        if(Auth::check()){
            // check auth user role (I don't know how you can implement this for yourself, this is just for me)
            if(Auth::user()->role->name == 'admin'){
                return $next($request);
            } else {
                return redirect()->route('admin.dashboard'); // for admins
            }
        }

        return redirect()->route('main'); // for users
    }
}
'Admin' => \App\Http\Middleware\AdminMiddleware::class,
// USER ROUTES
Route::get('/', 'FrontController@main')->name('main');

// ADMIN ROUTES
Route::group([
    'as' => 'admin.',
    'middleware' => [ 'Admin' ],
], function () {
    Route::get('dashboard', 'AdminController@dashboard');
});