你不能用相同的路由指向两个动作,总是会调用最后一个动作,所以最好的方法是通过middleware,
例如,您需要转到app/Http/Middleware 并创建一个class isAdministrator,它应该如下所示:
<?php
namespace TPS\Http\Middleware;
use Closure;
use Redirect;
use Illuminate\Contracts\Auth\Guard;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
class IsAdministrator
{
public function __construct(Guard $auth) {
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// I don't know how you verify that your user is an admin or not
// but here we have a role wich can contain many roles
if (! strpos($this->auth->user()->role, 'Administrateur')) {
if ($request->ajax()) {
return response('Forbidden.', 403);
} else {
// now here you will redirect to the normal user dashboard
Redirect::route('user.dashboard');
}
}
return $next($request);
}
}
现在您需要注册您的中间件并为其命名,转到app/Http/Kernel.php 并将您的中间件添加到以下数组中:
/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \TPS\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \TPS\Http\Middleware\RedirectIfAuthenticated::class,
// I called it admin
'admin' => \TPS\Http\Middleware\IsAdministrator::class,
];
现在您可以像这样将此中间件附加到您的管理仪表板路由(您需要使用命名路由,当您需要更改一些 url 时会用到它):
Route::get('/dashboard', [
'as' => 'admin.dashboard', 'uses' => 'PagesController@userType1'
]);