Skip to content

Commit

Permalink
- Add seeders for roles & permissions.
Browse files Browse the repository at this point in the history
- Add admin dashboard route.
- Add middleware for checking if the user is admin.
  • Loading branch information
hackedhorizon committed Sep 4, 2024
1 parent 8d44d0a commit b50edb0
Show file tree
Hide file tree
Showing 15 changed files with 154 additions and 2 deletions.
1 change: 1 addition & 0 deletions app/Http/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,6 @@ class Kernel extends HttpKernel
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'translate' => \App\Http\Middleware\SetLocale::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
];
}
26 changes: 26 additions & 0 deletions app/Http/Middleware/AdminMiddleware.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;

class AdminMiddleware
{
/**
* 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()->hasRole('admin'))
{
abort(403);
}

return $next($request);
}
}
13 changes: 13 additions & 0 deletions app/Livewire/AdminPanel/Dashboard.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace App\Livewire\AdminPanel;

use Livewire\Component;

class Dashboard extends Component
{
public function render()
{
return view('livewire.admin-panel.dashboard');
}
}
13 changes: 13 additions & 0 deletions app/Livewire/Auth/Permissions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace App\Livewire\Auth;

use Livewire\Component;

class Permissions extends Component
{
public function render()
{
return view('livewire.auth.permissions');
}
}
3 changes: 2 additions & 1 deletion app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Sanctum\HasApiTokens;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable implements MustVerifyEmail
{
use CanResetPassword, HasApiTokens, HasFactory, Notifiable;
use CanResetPassword, HasApiTokens, HasFactory, Notifiable, HasRoles;

/**
* The attributes that are mass assignable.
Expand Down
1 change: 1 addition & 0 deletions config/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@
App\Providers\EmailVerificationServiceProvider::class,
App\Providers\LocalizationServiceProvider::class,
App\Providers\ReadPostServiceProvider::class,
Spatie\Permission\PermissionServiceProvider::class,
])->toArray(),

/*
Expand Down
2 changes: 2 additions & 0 deletions database/seeders/DatabaseSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ class DatabaseSeeder extends Seeder
public function run(): void
{
$this->call([
RoleSeeder::class,
PermissionSeeder::class,
UserSeeder::class,
FailedLoginAttemptSeeder::class,
CategoryPostSeeder::class,
Expand Down
19 changes: 19 additions & 0 deletions database/seeders/PermissionSeeder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;

class PermissionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$createArticles = Permission::create(['name' => 'create articles']);
$createArticles->assignRole('admin');
}
}
19 changes: 19 additions & 0 deletions database/seeders/RoleSeeder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;

class RoleSeeder extends Seeder
{
/**
* Create user and admin role.
*/
public function run(): void
{
Role::create(['name' => 'admin']);
Role::create(['name' => 'user']);
}
}
10 changes: 9 additions & 1 deletion database/seeders/UserSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,19 @@ public function run(): void
public function createDefaultUsers()
{
// Create a default guest user with fixed credentials (username: test, password: password)
$user = User::factory(User::class)->create([
$defaultUser = User::factory(User::class)->create([
'username' => 'test',
'password' => bcrypt('password'),
]);

$adminUser = User::factory(User::class)->create([
'username' => 'admin',
'password' => bcrypt('password'),
]);

$defaultUser->assignRole('user');
$adminUser->assignRole('admin');

// Create 10 dummy users using the User factory
User::factory(10)->create();
}
Expand Down
3 changes: 3 additions & 0 deletions resources/views/livewire/admin-panel/dashboard.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div>
{{-- If your happiness depends on money, you will never be happy with yourself. --}}
</div>
3 changes: 3 additions & 0 deletions resources/views/livewire/auth/permissions.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div>
{{-- Knowing others is intelligence; knowing yourself is true wisdom. --}}
</div>
5 changes: 5 additions & 0 deletions routes/web.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?php

use App\Livewire\AdminPanel\Dashboard;
use App\Livewire\Home;
use App\Livewire\Posts\Index;
use App\Livewire\Posts\Show;
Expand All @@ -24,4 +25,8 @@
Route::get('/settings', Settings::class)->name('guest.settings');
});

Route::middleware(['auth', 'admin', 'translate'])->prefix('admin')->group(function () {
Route::get('/', Dashboard::class)->name('admin.dashboard');
});

require __DIR__.'/auth.php';
19 changes: 19 additions & 0 deletions tests/Feature/Livewire/AdminPanel/DashboardTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Tests\Feature\Livewire\AdminPanel;

use App\Livewire\AdminPanel\Dashboard;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Livewire\Livewire;
use Tests\TestCase;

class DashboardTest extends TestCase
{
/** @test */
public function renders_successfully()
{
Livewire::test(Dashboard::class)
->assertStatus(200);
}
}
19 changes: 19 additions & 0 deletions tests/Feature/Livewire/Auth/PermissionsTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Tests\Feature\Livewire\Auth;

use App\Livewire\Auth\Permissions;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Livewire\Livewire;
use Tests\TestCase;

class PermissionsTest extends TestCase
{
/** @test */
public function renders_successfully()
{
Livewire::test(Permissions::class)
->assertStatus(200);
}
}

0 comments on commit b50edb0

Please sign in to comment.