laravel 5.1使用Entrust在中间件中扮演管理员角色


laravel 5.1 admin role in middleware using Entrust

我正在尝试使用"auth"answers"auth.admin"中间件来过滤路由,这应该类似于laravel 4.2的route::filter。但它不起作用。这是我的路线

Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'auth.admin']], function()
{
   // ... 
});

Kernel.php

protected $routeMiddleware = [
    'auth' => 'App'Http'Middleware'Authenticate::class,
    'auth.basic' => 'Illuminate'Auth'Middleware'AuthenticateWithBasicAuth::class,
    'guest' => 'App'Http'Middleware'RedirectIfAuthenticated::class,
    'auth.admin' => 'App'Http'Middleware'RedirectIfAdmin::class,
    'role' => Zizaco'Entrust'Middleware'EntrustRole::class,
    'permission' => Zizaco'Entrust'Middleware'EntrustPermission::class,
    'ability' => Zizaco'Entrust'Middleware'EntrustAbility::class,
];

重定向IfAdmin.php

        <?php
        namespace App'Http'Middleware;
        use Closure;
        use Entrust;
        class RedirectIfAdmin
        {
            /**
             * Handle an incoming request.
             *
             * @param  'Illuminate'Http'Request  $request
             * @param  'Closure  $next
             * @return mixed
             */
            public function handle($request, Closure $next)
            {
                if (!Entrust::hasRole(config('customConfig.roles.admin'))) {
                    return redirect()->route('dashboard')
                                ->with('error', 'Access Denied');
                }
                return $next($request);
            }
        }

正如u所说,ur dashboard路由是为经过身份验证的用户提供的,但是,ur检查用户是否不在admin role中,发送到仪表板,当他被发送到仪表盘时,他被重定向回,可能是由于另一个中间件的启动,并且发送回登录和再次从登录到仪表板中,所以只需从ur if条件中删除!