【问题标题】:Route Restriction base on Auth User Type基于身份验证用户类型的路由限制
【发布时间】:2015-12-28 21:21:51
【问题描述】:

我有 3 种用户

  • 管理员超级
  • 管理员
  • 管理员只读

我在/app/Http/Middleware 中创建了 3 个中间件 我给他们起了名字

  • AdminSuperMiddleware.php
  • AdminMiddleware.php
  • AdminReadonlyMiddleware.php

我已经在/app/Http/Kernel.php注册了如下

    'admin'          => 'App\Http\Middleware\AdminMiddleware',
    'admin-super'    => 'App\Http\Middleware\AdminSuperMiddleware',
    'admin-readonly' => 'App\Http\Middleware\AdminReadOnlyMiddleware',

我尝试在我的 routes.php 中调用它们

    $router->group(['middleware' => ['auth', 'admin-super'] ], function() {
        Route::get('account','AccountController@index');
        Route::post('account/store','AccountController@store');
        Route::post('/view-profile/logo/update', 'ProfileController@updateLogo');
    });

    $router->group(['middleware' => ['auth', 'admin'] ], function() {
        Route::get('account','AccountController@index');
        Route::post('account/store','AccountController@store');
    });

    $router->group(['middleware' => ['auth', 'admin-readonly'] ], function() {
        Route::get('account','AccountController@index');
    });

结果

当我以user type == admin 登录并转到:

http://localhost:8888/account

我一直收到 404。

我错过了什么吗?

对此的任何提示/建议将不胜感激!

【问题讨论】:

标签: php laravel laravel-5 laravel-5.1 middleware


【解决方案1】:

第一个匹配的路由将被执行。

【讨论】:

  • 如何处理这个问题?我应该如何布置我的路线文件?
  • 我想我会把它简化为一个中间件,然后检查那个中间件的管理员类型。
  • 那么,假设我只有 1 个 AdminMIddleware.php,现在,我的路由文件应该是什么样子。
  • 底线是你不应该重新声明相同的路由,因为第一个匹配总是会被执行。因此,随心所欲地组织它,只是不要重新声明相同的路线。您可以继续使用三个单独的中间件,但这样做的方式是您只声明了一次给定的路由。您可以有一个通用的“管理员”中间件组。然后在需要提升权限的路由上,添加更具体的中间件。
  • 而且,顺便说一句,您可以嵌套路由组。因此,您可以将所有管理路由包装在使用 auth 中间件的路由组中。
猜你喜欢
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2016-10-09
  • 2015-04-28
  • 2018-08-28
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
相关资源
最近更新 更多