用户和管理员分离的路由 Laravel

Routes for users and admins separation Laravel

我正在尝试将用户与管理员分开并禁止用户访问管理员部分。

我的目录结构是

resources/
  -views/
    --site/
      ---users/
      ---admin/

web.php 我添加了这个

Route::get ('/', ['uses' => 'HomeController@index']);

Route::auth();
Route::group(['middleware' => ['auth'], 'namespace' => 'users', 'prefix' => 'site/users'], function() {

   // users routes
});

Route::group(['middleware' => ['auth'], 'namespace' => 'admin', 'prefix' => 'site/admin'], function() {

   // admin routes
   Route::get ('/admin', ['uses' => 'AdminController@index', 'before' => 'admin']);
});

当我以管理员身份登录并尝试打开 http://example.com/admin 我有

(1/1) NotFoundHttpException

用户也是如此。

我在数据库 is_admin 中有列,我在登录期间检查并存储在会话中。

我想你可以试试这个:

Route::group(['middleware' => ['auth'], 'namespace' => 'admin', 'prefix' => 'admin'], function() { 
  // admin routes 
  Route::get ('/', ['uses' => 'AdminController@index', 'before' => 'admin']); 
});

希望这对你有用!!!

您需要在 App\Http\Middleware 中创建例如 AdminMiddleware

php artisan make:middleware AdminMiddleware

放入新创建的中间件

public function handle($request, Closure $next)
{
    if ($request->user()->type != 'A')
    {
        return redirect('home');
    }

    return $next($request);
}

根据您在存储用户会话和检查列 is_admin 的问题中的评论,您需要更改 if() 中的检查。如果你使用 Auth 会是这样的

if (Auth::user()->is_admin != 1) {...}

is_admin 列中的任何内容。然后在您的路线中,您可以像这样访问它

Route::group(['middleware' => 'App\Http\Middleware\AdminMiddleware'], function()
{
    Route::get ('/admin', ['uses' => 'AdminController@index', 'before' => 'admin']); 

});

Source.