在Laravel 4.2中,我有以下路线:
Route::group(array('before' => 'auth'), function() {
Route::post('/account/edit', array(
'as' => 'account-edit',
'uses' => 'UserController@accEdit'
));
});
我分别为普通用户和管理员提供了ClientController
和AdminController
。
假设我知道用户类型(Auth::getUser()->getType()
),如何在不向路由类添加额外逻辑的情况下用正确的控制器替换UserController
?可以用过滤器完成吗?
我正在尝试避免路由和最终控制器之间的额外控制器。
答案 0 :(得分:0)
实际上,没有必要创建两个用户控制器。只需使用中间件来限制客户端的访问权限。通过这种方式,您可以保留原始UserController
。
您可以在中间件中添加 IsAdmin.php 。
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\RedirectResponse;
use Illuminate\Contracts\Auth\Guard;
class IsAdmin {
public function handle($request, Closure $next)
{
if (Auth::getUser()->getType() === 'admin')
{
return $next($request);
}
return new RedirectResponse(url('/'));
}
}
在 kernel.php 中,您需要申报中间件。
protected $routeMiddleware = [
// some other middlewares
'admin' => 'App\Http\Middleware\IsAdmin',
];
然后,在 UserController.php
的public function __construct
中添加以下语句
$this->middleware('admin', ['only' => ['OnlyForAdmin1','OnlyForAdmin2']]);
因此,客户将无法访问函数OnlyForAdmin1
和函数OnlyForAdmin2
。