Download Laravel App
composer create-project --prefer-dist laravel/laravel my-app
C:\xampp\htdocs\laravel>composer create-project --prefer-dist laravel/laravel my-app
Connecting our Database
open .env file root directory.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=root
DB_PASSWORD=
Install Auth Scaffold
composer require laravel/ui
C:\xampp\htdocs\laravel\my-app>composer require laravel/ui
generate auth scaffold with bootstrap
php artisan ui bootstrap --auth
C:\xampp\htdocs\laravel\my-app>php artisan ui bootstrap --auth
install npm packages
npm install
C:\xampp\htdocs\laravel\my-app>npm install
built bootstrap CSS
npm run build
C:\xampp\htdocs\laravel\my-app>npm run build
Setting up migration and model
Open the creates_users_table.php migration file Database/migration and update the following field
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | //database/migrations/create_users_table.php <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up() { Schema::create( 'users' , function (Blueprint $table ) { $table ->id(); $table ->string( 'name' ); $table ->string( 'email' )->unique(); $table ->timestamp( 'email_verified_at' )->nullable(); $table ->string( 'password' ); $table ->boolean( 'type' )-> default (false); //add type boolean Users: 0=>User, 1=>Admin, 2=>Manager $table ->rememberToken(); $table ->timestamps(); }); } public function down() { Schema::dropIfExists( 'users' ); } }; |
C:\xampp\htdocs\laravel\my-app>php artisan migrate
open app/User.php and update the below field
app/Models/User.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | //app/Models/User.php <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; use Illuminate\Database\Eloquent\Casts\Attribute; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; /** * The attributes that are mass assignable. * * @var array<int, string> */ protected $fillable = [ 'name' , 'email' , 'password' , 'type' ]; protected $hidden = [ 'password' , 'remember_token' , ]; protected $casts = [ 'email_verified_at' => 'datetime' , ]; /** * Interact with the user's first name. * * @param string $value * @return \Illuminate\Database\Eloquent\Casts\Attribute */ protected function type(): Attribute { return new Attribute( get: fn ( $value ) => [ "user" , "admin" , "manager" ][ $value ], ); } } |
php artisan make:middleware UserAccess
C:\xampp\htdocs\laravel\my-app>php artisan make:middleware UserAccess
open app/Http/middleware/UserAccess.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | //app/Http/middleware/UserAccess.php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class UserAccess { /** * 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 , $userType ) { if (auth()->user()->type == $userType ){ return $next ( $request ); } return response()->json([ 'You do not have permission to access for this page.' ]); /* return response()->view('errors.check-permission'); */ } } |
add the following $routeMiddleware property
protected $routeMiddleware = [
'user-access' => \App\Http\Middleware\UserAccess::class,
];
Controller
open the app\Http\Controllers\HomeController.php add code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | //app\Http\Controllers\HomeController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HomeController extends Controller { /** * Create a new controller instance. * * @return void */ public function __construct() { $this ->middleware( 'auth' ); } /** * Show the application dashboard. * * @return \Illuminate\Contracts\Support\Renderable */ public function index() { return view( 'home' ); } /** * Show the application dashboard. * * @return \Illuminate\Contracts\Support\Renderable */ public function adminHome() { return view( 'adminHome' ); } /** * Show the application dashboard. * * @return \Illuminate\Contracts\Support\Renderable */ public function managerHome() { return view( 'managerHome' ); } } |
Open the resources/views/home.blade.php file and update the below code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | //resources/views/home.blade.php @ extends ( 'layouts.app' ) @section( 'content' ) <div class = "container" > <div class = "row justify-content-center" > <div class = "col-md-8" > <div class = "card" > <div class = "card-header" >{{ __( 'Dashboard' ) }}</div> <div class = "card-body" > @ if (auth()->user()->is_admin == 1) <a href= "{{url('admin/routes')}}" >Admin</a> @ else <div class =”panel-heading”>Normal User</div> @ endif </div> </div> </div> </div> </div> @endsection |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //resources/views/adminHome.blade.php @ extends ( 'layouts.app' ) @section( 'content' ) <div class = "container" > <div class = "row justify-content-center" > <div class = "col-md-8" > <div class = "card" > <div class = "card-header" >{{ __( 'Dashboard' ) }}</div> <div class = "card-body" > You are a Admin User. </div> </div> </div> </div> </div> @endsection |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | //resources/views/managerHome.blade.php @ extends ( 'layouts.app' ) @section( 'content' ) <div class = "container" > <div class = "row justify-content-center" > <div class = "col-md-8" > <div class = "card" > <div class = "card-header" >{{ __( 'Dashboard' ) }}</div> <div class = "card-body" > You are a Manager User. </div> </div> </div> </div> </div> @endsection |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | //app/Http/Controllers/Auth/LoginController.php <?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; class LoginController extends Controller { use AuthenticatesUsers; protected $redirectTo = RouteServiceProvider::HOME; public function __construct() { $this ->middleware( 'guest' )->except( 'logout' ); } public function login(Request $request ) { $input = $request ->all(); $this ->validate( $request , [ 'email' => 'required|email' , 'password' => 'required' , ]); if (auth()->attempt( array ( 'email' => $input [ 'email' ], 'password' => $input [ 'password' ]))) { if (auth()->user()->type == 'admin' ) { return redirect()->route( 'admin.home' ); } else if (auth()->user()->type == 'manager' ) { return redirect()->route( 'manager.home' ); } else { return redirect()->route( 'home' ); } } else { return redirect()->route( 'login' ) ->with( 'error' , 'Email-Address And Password Are Wrong.' ); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | //routes/web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\HomeController; Route::get( '/' , function () { return view( 'welcome' ); }); Auth::routes(); //Normal Users Routes List Route::middleware([ 'auth' , 'user-access:user' ])->group( function () { Route::get( '/home' , [HomeController:: class , 'index' ])->name( 'home' ); }); //Admin Routes List Route::middleware([ 'auth' , 'user-access:admin' ])->group( function () { Route::get( '/admin/home' , [HomeController:: class , 'adminHome' ])->name( 'admin.home' ); }); //Admin Routes List Route::middleware([ 'auth' , 'user-access:manager' ])->group( function () { Route::get( '/manager/home' , [HomeController:: class , 'managerHome' ])->name( 'manager.home' ); }); |
Starting Laravel development server: http://127.0.0.1:8000