How do you manage the roles ? Do you use a package like the Spatie roles and permissions ? Or via a simple table in the database ?
The logic you can do is to protect the routes with middlewares.
For example you can create an AdminMiddleware.
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
if (!auth()->user()->isAdmin()) {
return redirect()->route('member.recipes');
}
return $next($request);
}
}
Then you register your middleware in the Kernel file.
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\AdminMiddleware::class,
...
];
And you can use it to protect some routes.
Route::middleware('auth')->group(function () {
Route::middleware('admin')->name('admin.')->prefix('admin')->group(function () {
Route::get('categories', CategoriesList::class)->name('categories');
Route::get('products', ProductsList::class)->name('products');
...
});
});
You can also choose another approach which consist to protect only some methods in the controllers.
https://laravel.com/docs/10.x/controllers#controller-middleware