在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()
),如何在不向routes类添加额外逻辑的情况下用正确的控制器替换UserController
?这可以用过滤器完成吗?
我试图避免在路线和最终控制器之间增加一个控制器。
实际上,不需要创建两个用户控制器。只需使用中间件来限制客户端的访问权限。通过这种方式,您可以保留原始UserController
。
您可以在中间件中添加IsAdmin.php。
<?php namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRedirectResponse;
use IlluminateContractsAuthGuard;
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' => 'AppHttpMiddlewareIsAdmin',
];
然后,在UserController.php的public function __construct
中添加以下语句
$this->middleware('admin', ['only' => ['OnlyForAdmin1','OnlyForAdmin2']]);
因此,客户端将无法访问函数OnlyForAdmin1
和函数OnlyForAdmin2
。