【发布时间】:2015-08-30 15:34:27
【问题描述】:
我有一组路由,我希望仅当用户位于某个部门或他们尝试访问的路由中的 id 与他们的登录 id 匹配时才允许用户访问。
我有:
Route::group(array('before' => 'auth.department:6|auth.me'), function () {
Route::get('users/{id}/outofoffice', ['as' => 'users.outofoffice.form', 'uses' => 'RackspaceController@outOfOfficeForm']);
Route::post('users/{id}/outofoffice', ['as' => 'users.outofoffice.save', 'uses' => 'RackspaceController@outOfOfficeSave']);
Route::get('users', ['as' => 'users.list', 'uses' => 'UserController@index']);
Route::get('users/{id}/edit', ['as' => 'users.edit', 'uses' => 'UserController@edit']);
Route::post('users/{id}', ['as' => 'users.update', 'uses' => 'UserController@update']);
});
但它不起作用,以前的 'auth.department:6' 按预期工作,但是当我将其更改为 'auth.department:6|auth.me' 时,用户仍然被拒绝访问。过滤器定义为:
Route::filter('auth.department', function($route, $request)
{
if(Auth::level() > 5) return null;
$departmentIds = array_slice(func_get_args(), 2);
if(!in_array(Auth::dept(), $departmentIds)) {
if (Request::ajax())
{
return Response::make('Unauthorized', 401);
}
else
{
return Response::make('Unauthorized', 401);
}
}
});
Route::filter('auth.me', function(\Illuminate\Routing\Route $route, $request){
if($route->getParameter('id') == Auth::id()) {
return null;
} else {
return BaseController::failed(['authorization' => ['Unauthorized']], 401);
}
});
我这样做了:
Route::filter('auth.dept-6-or-me', function(\Illuminate\Routing\Route $route, $request){
if(Auth::level() > 5) return null;
$departmentIds = array_slice(func_get_args(), 2);
if($route->getParameter('id') == Auth::id()) {
return null;
}
elseif(!in_array(Auth::dept(), $departmentIds)) {
if (Request::ajax())
{
return Response::make('Unauthorized', 401);
}
else
{
return Response::make('Unauthorized', 401);
}
} else {
if (Request::ajax())
{
return Response::make('Unauthorized', 401);
}
else
{
return Response::make('Unauthorized', 401);
}
}
});
【问题讨论】:
-
我很确定
filter1|filter2中的|表示“和”,而不是“或”。除非有人构建了另一个解决方案,否则您可能必须创建第三个过滤器,唯一的工作就是调用其他两个过滤器。 -
我很确定乔尔是对的
-
@JoelHinz 谢谢,我制作了另一个过滤器,两者都可以。
标签: php laravel laravel-4 laravel-routing