Laravel访问控制器根据用户组使用不同的路由

时间:2015-03-19 20:26:34

标签: laravel-5

我目前有bookeradmin个用户组。 booker用户被分配到1 event,而admin用户未分配给任何活动。

两个用户组都有这样的路由组:

Route::group(['middleware' => 'booker'], function() {

    Route::controller('event', 'EventController');

});

Route::group(['middleware' => 'admin'], function() {

    Route::controller('admin', 'AdminController');

});

EventController中的操作是这样的:

getIndex      /event
getOverview   /event/overview
postOverview  /event/overview
getFacilities /event/facilities
postFacilties /event/facilities
etc.

admin用户组登录后,我是否可以对此类路由使用EventController操作:

/admin/events/1
/admin/events/1/overview
/admin/events/1/facilties
/admin/events/1/schedule
etc.

在哪里,我不会从用户那里获取event个ID,而是从网址获取。

由于

1 个答案:

答案 0 :(得分:0)

好的,我设法到达那里,虽然它很乱,所以我仍然想知道是否有更好的解决方案:

路线:

Route::group(['middleware' => 'booker'], function() {

    Route::controller('event', 'EventController');

});

Route::group(['middleware' => 'admin'], function() {

    Route::controller('admin/events/{id?}', 'EventController');
    Route::controller('admin', 'AdminController');
    Route::get('event', function() { return redirect('admin'); });

});

在EventController中(使用Sentry):

public function __construct()
{
    $user = Sentry::getUser();

    if($user->hasAccess('admin')) {
        $id = Request::segment(3);
        $event = Event::find($id);
        if(!$event) {
            abort(404);
        }
    } else {
        $event = $user->event;
    }

    $this->data['event'] = $event;
}
public function getIndex()
{    
    return view('event.index', $this->data);
}

因为您可以看到我必须使用ID段的URL段,因为我无法找到在路径中传递id变量的方法。路由变量只允许我忽略id并加载控制器。

我发现在EventController视图中我无法使用这样的URL:

<a href="{{ URL::action('EventController@getOverview') }}">Overview<a>
// /event/overview
// /admin/events//overview

然而,使用其他助手我可以破解它:

<a href="{{ URL::full().'/overview' }}">Overview<a>
// /event/overview
// /admin/events/3/overview