I would have two different controllers — one for displaying the user accessible content and one for administrating the content.
My folder structure often looks like:
- Controllers
- Admin
- LessonsController
- LessonsController
- Admin
The Controllers/Admin/LessonsController would have and auth.admin middleware applied, meaning only admins could access that controller.
The Controllers/LessonsController would handle displaying the content on the site, and would have nothing to do with administering content.
I namespace my admin controllers to App\Http\Controllers\Admin and setup a route group, something like:
Route::group(['prefix' => 'admin', 'middleware' => 'auth.admin', 'namespace' => 'Admin'], function ()
{
// Lessons
Route::resource('lessons', 'LessonsController');
});
This way all your admin controllers are protected to admin users only, and you keep your admin area logic separate from your “front-end”.