Laravel 5.6.20路由在不同的组中具有相同的URL

时间:2018-05-25 09:31:53

标签: laravel laravel-routing laravel-5.6 laravel-middleware laravel-authorization

我的用户有user组和admin角色。

我想要的是什么:

同一网址的不同控制器操作。我认为以下情况会很好,但这不起作用。

目前,当我以管理员身份登录时,我得到一个例外,我不允许查看该页面。

routes/web.php

Route::group( [
    'middleware' => [ 'auth', \App\Http\Middleware\UserLastActivity::class ],
    'domain'     => parse_url( env( 'APP_URL' ), PHP_URL_HOST )
], function () {

    Route::group( [
        'middleware' => [ \App\Http\Middleware\Admin::class ]
    ], function () {
        Route::get('/', 'AdminController@index')->name('home');
    } );


    Route::group( [
        'middleware' => [ \App\Http\Middleware\User::class ]
    ], function () {
        Route::get( '/', 'CvController@index' )->name( 'home' );
    } );
} );

Http/Middleware/User.php

<?php

namespace App\Http\Middleware;

use Closure;

class User {
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     *
     * @return mixed
     */
    public function handle( $request, Closure $next ) {
        if ( \Auth::user()->role->id === \App\User::ROLE_USER ) {
            return $next( $request );
        }
        abort( 401 );
    }
}

Http/Middleware/Admin.php

<?php

namespace App\Http\Middleware;

use Closure;

class Admin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ( \Auth::user()->role->id === \App\User::ROLE_ADMIN ) {
            return $next( $request );
        }

        abort( 401, __('messages.http.unauthorized') );
    }
}

关于如何实现这一目标的任何想法?

要明确:

当用户有role_id 1(管理员)时,路由/应该执行AdminController@index

当用户有role_id 2(用户)时:路由/应该执行CvController@index

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是重新考虑您的路线,因为如果您想遵循标准,这不是好的设计。当请愿不同时(post,get,put等),您可以使用不同的控制器使用相同的URL。

根据控制器内部的用户角色,您是否无法完成必须完成的操作的逻辑?例如:

Route::get('/', 'UserController@index');

然后在UserController的索引中 - &gt;

public function index()
{
    if (Auth::user()->role->id == 1) :
       //do X
    else : 
      //do y
    endif;
}
相关问题