How to Create a Restricted Administration Control in Laravel 6

Steps:

1.Create a migration file for admin user.

php artisan make:migration add_is_admin_to_user_table --table=users

2. Add is_admin field to user table


public function up()
{
    Schema::table('users', function(Blueprint $table)
    {
        $table->boolean('is_admin')->default(false);
    });
}
public function down()
{
     Schema::table('users', function(Blueprint $table)
     {
         $table->dropColumn('is_admin');
     });
}

3. Run the migrate command

php artisan migrate

4. Create administration controller

php artisan make:controller Admin/UserController

5. Create model user

php artisan make:model User

6. Run the following command to install package for setting namespace in laravel 6.

composer require andrey-helldar/laravel-app

7. Add application namespace as ‘admin’

php artisan app:name newproject

8. Add the route group


Route::get('/utype', 'Admin\UserController@usertype');
Route::group(['prefix'=>'admin','namespace'=>'admin'], function()
{
    Route::resource('/','UserController');
    Route::get('alluser','UserController@all_user');
});

9. Create a new directory named admin under resource/views and add the following code in index.blade.php.

@extends('layouts.app')
@section('content')
<h1 align="center">{{ $message }} </h1>
@endsection

10. Open UserController and add User,Auth and Session class.


namespace newproject\Http\Controllers\Admin;

use newproject\Http\Controllers\Controller;
use Illuminate\Http\Request;
use newproject\User;
use Auth;
use Session;


class UserController extends Controller
{
    public function __construct()
{
    $this->middleware('auth');
}
public function usertype()
{
    if (Auth::user()->is_admin!=1)
        return view('home') ->with('message','Welcome to Home Page');
    else
        return view('Admin.index')->with('message','Welcome to Admin Page');
}
}

11. Modify the code of LoginController

protected $redirectTo = '/utype';

12. Start the server and login as admin or register user

http://localhost:8000/

13. Create a new view file named alluser.blade.php under admin folder.

@extends('layouts.app')
@section('content')
<h1>Registered Users</h1>
<ul>
@forelse ($users as $user)
<li>{{ $user->name }} ({{ $user->email }})</li>
@empty
<li>No registered users</li>
@endforelse
</ul>
@endsection

14. Add the following methods in UserController

public function index()
{
    if (Auth::user()->is_admin!=1)
    {
        Session::put('message', 'Access denied!');
        return \Redirect::to('home');
    }
    return view('Admin.index')->with('message','Welcome to Admin Page');
}
public function all_user()
{
    if (Auth::user()->is_admin!=1)
    {
       Session::put('message', 'Access denied!');
       return \Redirect::to('home');
    }
    $users = User::orderBy('created_at', 'desc')->get();
    return view('Admin.alluser')->with('users', $users);
}

15. Open HomeController and add the following code.

use Auth;
use Session;
public function index()
{
//return view('home');
     $e=Session::get('message');
     Session::put('message', '');
     return view('home')->with('message',$e);
}


16. Add the line in home.blade.php

<h1 align="center"> {{ $message }} </h1>

17. Open welcome.blade.php add the following route for home link

‘/utype’

18. Login as Register and admin user and try the following url

http://localhost:8000/admin
http://localhost:8000/admin/alluser

You can see the following video to show the steps properly.