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

Laravel access controllers using different routes depending on user group

我目前有一个 bookeradmin 个用户组。 booker 个用户分配给 1 个 eventadmin 个用户未分配给任何事件。

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

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,而是从 URL 获取它。

谢谢

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

路线:

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'); });

});

在事件控制器中(使用哨兵):

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);
}

正如您所见,我不得不使用 URL 段作为 id,因为我找不到在路由中传递 id 变量的方法。路由变量只是让我忽略 id 并加载控制器。

我发现我不能在 EventController 视图中使用这样的 URLs:

<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