Kembali lagi di tutorial boilerplate laravel media-info.id, kali ini kita akan membahas cara membuat middleware untuk hak akses.
Ditutorial sebelumnya kita sudah membuat user profile, tetapi belum ada hak akses maka yang bukan admin juga bisa tambah user, delete user dan edit hak akses user. maka dari itu kita akan membatasi akses untuk halaman user hanya admin yg bisa buka.
Tutorial Sebelumnya - Boilerplate Laravel 10: Membuat CRUD User Profile
hal pertama yang harus dilakukan adalah membuat file middleware dengan cara sebagai berikut, silahkan buka cmd
C:\xampp\htdocs\blog> php artisan make:middleware Admin
perintah di atas adalah untuk membuat file middleware bernama Admin.php yg berada di dalam folder app/Http/Middleware/
buka dan samakan dengan script dibawah ini.
Admin.php
<?php
namespace AppHttpMiddleware;
use Session;
use Auth;
use Closure;
class Admin
{
public function handle($request, Closure $next)
{
if(!Auth::user()->admin){
Session::flash('info','you not admin');
return redirect()->back();
}
return $next($request);
}
}
setelah di edit file Admin.php, kita lanjut edit file Kernel.php di dalam folder app/Http dan tambahkan script di bawah ini dalam fungsi route middleware.
'admin' => AppHttpMiddlewareAdmin::class
lihat script lengkapnya
Kernel.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
];
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' => [
'throttle:60,1',
'bindings',
],
];
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'admin' => \App\Http\Middleware\Admin::class
];
}
selanjutnya kita edit file UsersController.php di dalam folder app/Http/Controllers/ untuk menambahkan fungsi middleware yang tdi dibuat, perhatikan script dibawah ini.
public function __construct(){
$this->middleware('admin');
}
lihat script lengkapnya
<?php
namespace App\Http\Controllers;
use Session;
use App\User;
use App\Profile;
use Illuminate\Http\Request;
class UsersController extends Controller
{
public function __construct(){
$this->middleware('admin');
}
public function index()
{
return view('admin.users.index')->with('users', User::all());
}
public function create()
{
return view('admin.users.create');
}
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required',
'email' => 'required|email'
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt('password')
]);
$profile = Profile::create([
'user_id' => $user->id,
'avatar'=> 'uploads/avatars/anjas.jpg'
]);
Session::flash('success', 'user save success');
return redirect()->route('users');
}
public function show($id)
{
}
public function edit($id)
{
}
public function update(Request $request, $id)
{
}
public function destroy($id)
{
$user = User::find($id);
$user->profile->delete();
$user->delete();
Session::flash('success', 'delete user success');
return redirect()->back();
}
public function admin($id){
$user = User::find($id);
$user->admin = 1;
$user->save();
Session::flash('success','change admin success');
return redirect()->back();
}
public function not_admin($id){
$user = User::find($id);
$user->admin = 0;
$user->save();
Session::flash('success','change admin success');
return redirect()->back();
}
}
dan untuk menghiangkan menu user silahkan edit file app.blade.php di dalam folder resources/views/layouts
cari script dibawah ini
<li class="list-group-item">
<a href="{{ route('users') }}">User</a>
</li>
dan ubah seperti ini
@if(Auth::user()->admin)
<li class="list-group-item">
<a href="{{ route('users') }}">User</a>
</li>
@endif
coba jalankan login bukan sebagai admin maka menu user tidak ada serta ketika kita akses routenya juga tidak bisa.