I am trying to display different views depending on the type of user who logs in. If an admin logs in I want the admin dashboard to be displayed while if the customer logs in I want the website to be displayed. Following is my code:
web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\CustomerInquiryController;
use App\Http\Controllers\SupplierController;
use App\Http\Controllers\ProductController;
use App\Http\Controllers\employeeController;
use App\Http\Controllers\CustomerController;
use App\Http\Controllers\rewardsprogramController;
use App\Http\Controllers\giftcardController;
use App\Http\Requests\UpdaterewardsprogramRequest;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/login', function () {
return view('auth.login');
});
Route::get('/register', function () {
return view('auth.register');
});
Route::get('/main', function () {
return view('main');
});
Route::get('/feedback', function () {
return view('feedback');
});
// Route::get('/signin', function () {
// return view('signin');
// });
// Route::get('/signup', function () {
// return view('signup');
// });
Route::get('/admin_main', function () {
return view('admin_main');
});
Route::get('/product_main', function () {
return view('product_main');
});
Route::get('/product_add', function () {
return view('product_add');
});
Route::get('/product_manage', function () {
return view('product_manage');
});
Route::get('/product_edit', function () {
return view('product_edit');
});
Route::get('/supplier_main', function () {
return view('supplier_main');
});
Route::get('/supplier_add', function () {
return view('supplier_add');
});
Route::get('/supplier_manage', function () {
return view('supplier_manage');
});
Route::get('/supplier_edit', function () {
return view('supplier_edit');
});
Route::get('/employee_main', function () {
return view('employee_main');
});
Route::get('/employee_add', function () {
return view('employee_add');
});
Route::get('/employee_manage', function () {
return view('employee_manage');
});
Route::get('/employee_edit', function () {
return view('employee_edit');
});
Route::get('/customer_main', function () {
return view('customer_main');
});
Route::get('/customer_add', function () {
return view('customer_add');
});
Route::get('/customer_manage', function () {
return view('customer_manage');
});
Route::get('/customer_edit', function () {
return view('customer_edit');
});
Route::get('/reward_main', function () {
return view('reward_main');
});
Route::get('/reward_add', function () {
return view('reward_add');
});
Route::get('/reward_manage', function () {
return view('reward_manage');
});
Route::get('/reward_edit', function () {
return view('reward_edit');
});
Route::get('/reward_main', function () {
return view('reward_main');
});
Route::get('/gift_add', function () {
return view('gift_add');
});
Route::get('/gift_manage', function () {
return view('gift_manage');
});
Route::get('/gift_edit', function () {
return view('gift_edit');
});
//Creating hyperlinks
// Route::get('main', function () {
// return view('main');
// });
//Retrieving form data and storing it
// Route::post('/main', 'CustomerInquiryController@store');
Route::post('/feedback', [CustomerInquiryController::class, 'store']);
Route::post('/supplier_add', [SupplierController::class, 'store']);
Route::post('/product_add', [ProductController::class, 'store']);
Route::post('/employee_add', [employeeController::class, 'store']);
Route::post('/customer_add', [CustomerController::class, 'store']);
Route::post('/reward_add', [rewardsprogramController::class, 'store']);
Route::post('/gift_add', [giftcardController::class, 'store']);
//Updating form data and storing it
//Route::get('/items', [ItemController::class, 'index']); // Retrieve data
//Route::get('/reward_edit/{id}', [rewardsprogramController::class, 'edit']); // Edit form
Route::get('/reward_edit/{id}', [rewardsprogramController::class, 'edit'])->name('reward_edit');
Route::put('/reward_manage/{id}', [rewardsprogramController::class, 'update'])->name('reward_manage'); // Update data
Route::get('/customer_edit/{id}', [CustomerController::class, 'edit'])->name('customer_edit');
Route::put('/customer_manage/{id}', [CustomerController::class, 'update'])->name('customer_manage');
Route::get('/employee_edit/{id}', [employeeController::class, 'edit'])->name('employee_edit');
Route::put('/employee_manage/{id}', [employeeController::class, 'update'])->name('employee_manage');
Route::get('/gift_edit/{id}', [giftcardController::class, 'edit'])->name('gift_edit');
Route::put('/gift_manage/{id}', [giftcardController::class, 'update'])->name('gift_manage');
Route::get('/product_edit/{id}', [ProductController::class, 'edit'])->name('product_edit');
Route::put('/product_manage/{id}', [ProductController::class, 'update'])->name('product_manage');
Route::get('/supplier_edit/{id}', [SupplierController::class, 'edit'])->name('supplier_edit');
Route::put('/supplier_manage/{id}', [SupplierController::class, 'update'])->name('supplier_manage');
// Route::put('/reward_edit/{reward_program_id}', [rewardsprogramController::class, 'update'])->name('reward_update');
// Route::get('/reward_edit/{id}/edit', [rewardsprogramController::class, 'edit'])->name('reward_edit.edit');
// Route::put('/reward_edit/{id}', [rewardsprogramController::class, 'update'])->name('reward_edit.update');
// Route::get('/reward_edit', [rewardsprogramController::class, 'edit'])->name('reward_edit.edit');
// Route::put('/reward_edit', [rewardsprogramController::class, 'update'])->name('reward_edit.update');
//Retrieving table data and displaying it
Route::get('/admin_main', [ProductController::class, 'display']);
// Route::get('/main', [ProductController::class, 'mainview']);
Route::get('/product_manage', [ProductController::class, 'index']);
Route::get('/supplier_manage', [SupplierController::class, 'index']);
Route::get('/employee_manage', [employeeController::class, 'index']);
Route::get('/customer_manage', [CustomerController::class, 'index']);
Route::get('/reward_manage', [rewardsprogramController::class, 'index']);
Route::get('/gift_manage', [giftcardController::class, 'index']);
//Deleting table data
Route::delete('/product_manage', [ProductController::class, 'delete']);
Route::delete('/supplier_manage', [SupplierController::class, 'delete']);
Route::delete('/employee_manage', [employeeController::class, 'delete']);
Route::delete('/customer_manage', [CustomerController::class, 'delete']);
Route::delete('/reward_manage', [rewardsprogramController::class, 'delete']);
Route::delete('/gift_manage', [giftcardController::class, 'delete']);
Auth::routes();
//Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::middleware(['auth', 'admin'])->name('admin_')->prefix('admin')->group(function() {
Route::get('/admin_main',[App\Http\Controllers\Admin\AdminController::class,'index'])->name('main');
});
main_template2.blade.php
@guest
@if (Route::has('login'))
<li class="nav-item">
<a class="nav-link ms-5" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
@endif
@if (Route::has('register'))
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
@endif
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }}
</a>
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
@csrf
</form>
</div>
</li>
@endguest
Kernel.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array<int, class-string|string>
*/
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
/**
* The application's route middleware groups.
*
* @var array<string, array<int, class-string|string>>
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
/**
* The application's middleware aliases.
*
* Aliases may be used to conveniently assign middleware to routes and groups.
*
* @var array<string, class-string|string>
*/
protected $middlewareAliases = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'admin' => \App\Http\Middleware\Admin::class,
];
}
Databaseseeder.php
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call(Admin::class);
// \App\Models\User::factory(10)->create();
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => '[email protected]',
// ]);
}
}
Admin.php middleware
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
// if (Auth::check() && Auth::user()->is_admin) {
// return $next($request);
// }
// abort(403, 'Unauthorized');
if (!auth()->check() || !auth()->user()->is_admin) {
abort(403);
}
return $next($request);
}
}
Admin.php seeder
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;
use Illuminate\Support\Str;
class Admin extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
User::create([
'name' => 'Admin',
'email' => '[email protected]',
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi',
'remember_token' => Str::random(10),
'is_admin' => 1
]);
}
}
AdminController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class AdminController extends Controller
{
public function index(){
return view('admin_main');
}
}
Instead of using middleware to return a view, I believe you should use the middleware to redirect to a route and then return a view from your controller as usual. For example, if you detect the user is an admin, you redirect him to a different route than when you detect he is not an admin.
I believe your middleware should be as follows: