【问题标题】:Laravel access controllers using different routes depending on user groupLaravel 访问控制器根据用户组使用不同的路由
【发布时间】:2023-03-25 18:53:02
【问题描述】:

我目前有一个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 获取它。

谢谢

【问题讨论】:

    标签: laravel-5


    【解决方案1】:

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

    路线:

    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
    

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 2020-10-09
      • 1970-01-01
      • 2016-04-07
      • 2014-03-05
      • 2013-04-03
      • 2013-09-24
      • 2016-03-29
      • 2022-07-12
      相关资源
      最近更新 更多