Berikut adalah contoh cara membuat role user di Laravel tanpa menggunakan package
dan menampilkan menu di Blade sesuai role user:
*Langkah 1: Buat tabel roles dan user_roles*
Buat tabel `roles` untuk menyimpan daftar role yang tersedia:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateRolesTable extends Migration
{
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('description');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('roles');
}
}
Buat tabel `user_roles` untuk menyimpan relasi antara user dan role:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateUserRolesTable extends Migration
{
public function up()
{
Schema::create('user_roles', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('role_id');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('role_id')->references('id')->on('roles');
});
}
public function down()
{
Schema::dropIfExists('user_roles');
}
}
*Langkah 2: Buat model Role dan UserRole*
Buat model `Role` untuk mengelola data role:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
protected $fillable = ['name', 'description'];
public function users()
{
return $this->belongsToMany(User::class, 'user_roles');
}
}
Buat model `UserRole` untuk mengelola relasi antara user dan role:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class UserRole extends Model
{
protected $table = 'user_roles';
protected $fillable = ['user_id', 'role_id'];
public function user()
{
return $this->belongsTo(User::class);
}
public function role()
{
return $this->belongsTo(Role::class);
}
}
*Langkah 3: Tambahkan relasi role ke model User*
Tambahkan relasi role ke model `User`:
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
// ...
public function roles()
{
return $this->belongsToMany(Role::class, 'user_roles');
}
public function hasRole($role)
{
return $this->roles()->where('name', $role)->exists();
}
}
*Langkah 4: Buat middleware untuk memeriksa role*
Buat middleware `CheckRole` untuk memeriksa role user:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CheckRole
{
public function handle(Request $request, Closure $next, $role)
{
if (!$request->user()->hasRole($role)) {
abort(403);
}
return $next($request);
}
}
*Langkah 5: Tampilkan menu di Blade sesuai role*
Buat Blade template untuk menampilkan menu sesuai role:
// layouts/app.blade.php
<nav>
<ul>
@if(auth()->user()->hasRole('admin'))
<li><a href="{{ route('admin.dashboard') }}">Dashboard</a></li>
@endif
@if(auth()->user()->hasRole('user'))
<li><a href="{{ route('user.profile') }}">Profile</a></li>
@endif
</ul>
</nav>
Dengan demikian, Anda telah membuat role user di Laravel tanpa menggunakan package
dan menampilkan menu di Blade sesuai role user.