【问题标题】:Routes for users and admins separation Laravel用户和管理员分离 Laravel 的路由
【发布时间】:2017-12-31 09:44:01
【问题描述】:

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

我的目录结构是

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 中有列,我在登录期间检查并存储在会话中。

【问题讨论】:

  • 我认为这会有所帮助 'site/admin' => 'admin' Route::get ('/admin' => Route::get ('/'
  • 对不起,我听不懂。
  • 试试这个:Route::group(['middleware' => ['auth'], 'namespace' => 'admin', 'prefix' => 'admin'], function() { // 管理路由 Route::get ('/', ['uses' => 'AdminController@index', 'before' => 'admin']); });
  • 感谢@Bas,这真的很有效!
  • 如果我还有其他想要以用户身份访问的目录怎么办?如何在prefix 中添加多个目录?赞这个Route::get ('/cart/order', ['uses' => 'CartController@order', 'before' => 'auth|csrf']);这条路线我现在可以访问了

标签: laravel laravel-5 laravel-routing


【解决方案1】:

您需要在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.

【讨论】:

  • 感谢您的回答。一会儿试试看。
【解决方案2】:

我想你可以试试这个:

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

希望这对你有用!!!

【讨论】:

  • 它至少可以加载页面。但是user 仍然可以访问管理部分
  • 当我检查用户 dd(BaseController::isAdmin()) 时,我有 false 所以应该无法访问 admin 部分,对吧?
  • @Peter 你想达到什么目的? domain.com/admin 和 domain.com/users?
  • 简单限制用户访问管理部分
猜你喜欢
  • 1970-01-01
  • 2015-11-09
  • 2018-09-21
  • 2016-04-21
  • 2020-08-27
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
相关资源
最近更新 更多