From f290f941edf69e14fd66347d125761052caf6409 Mon Sep 17 00:00:00 2001 From: pesu98 Date: Mon, 11 May 2026 11:41:20 +0800 Subject: [PATCH] add role feature --- app/Http/Controllers/RoleController.php | 16 ++++++ app/Models/Role.php | 15 +++++ database/factories/RoleFactory.php | 24 ++++++++ .../2026_05_11_032743_create_roles_table.php | 28 ++++++++++ resources/views/layouts/navigation.blade.php | 10 ++++ resources/views/roles/index.blade.php | 56 +++++++++++++++++++ routes/web.php | 4 ++ 7 files changed, 153 insertions(+) create mode 100644 app/Http/Controllers/RoleController.php create mode 100644 app/Models/Role.php create mode 100644 database/factories/RoleFactory.php create mode 100644 database/migrations/2026_05_11_032743_create_roles_table.php create mode 100644 resources/views/roles/index.blade.php diff --git a/app/Http/Controllers/RoleController.php b/app/Http/Controllers/RoleController.php new file mode 100644 index 0000000..f65a9f7 --- /dev/null +++ b/app/Http/Controllers/RoleController.php @@ -0,0 +1,16 @@ +paginate(10); + + return view('roles.index', compact('roles')); + } +} diff --git a/app/Models/Role.php b/app/Models/Role.php new file mode 100644 index 0000000..01a4676 --- /dev/null +++ b/app/Models/Role.php @@ -0,0 +1,15 @@ + */ + use HasFactory; + + protected $fillable = ['name']; +} diff --git a/database/factories/RoleFactory.php b/database/factories/RoleFactory.php new file mode 100644 index 0000000..7b88046 --- /dev/null +++ b/database/factories/RoleFactory.php @@ -0,0 +1,24 @@ + + */ +class RoleFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => fake()->unique()->word(), + ]; + } +} diff --git a/database/migrations/2026_05_11_032743_create_roles_table.php b/database/migrations/2026_05_11_032743_create_roles_table.php new file mode 100644 index 0000000..3f600ed --- /dev/null +++ b/database/migrations/2026_05_11_032743_create_roles_table.php @@ -0,0 +1,28 @@ +id(); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('roles'); + } +}; diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php index c64bf64..e35a83b 100644 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -15,6 +15,10 @@ {{ __('Dashboard') }} + + + {{ __('Roles') }} + @@ -70,6 +74,12 @@ {{ __('Dashboard') }} + + {{ __('Users') }} + + + {{ __('Roles') }} + diff --git a/resources/views/roles/index.blade.php b/resources/views/roles/index.blade.php new file mode 100644 index 0000000..fc778d3 --- /dev/null +++ b/resources/views/roles/index.blade.php @@ -0,0 +1,56 @@ + + +

+ {{ __('Roles') }} +

+
+ +
+
+
+
+ + + + + + + + + + @foreach ($roles as $role) + + + + + + @endforeach + +
+ {{ __('ID') }} + + {{ __('Name') }} + + {{ __('Created') }} +
+ {{ $role->id }} + + {{ $role->name }} + + {{ $role->created_at->format('M j, Y') }} +
+ + @if ($roles->isEmpty()) +

{{ __('No roles found.') }}

+ @endif + + @if ($roles->hasPages()) +
+ {{ $roles->links() }} +
+ @endif +
+
+
+
+
diff --git a/routes/web.php b/routes/web.php index 74bb7ca..2e52264 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,8 @@ middleware(['auth', 'verified'])->name('dashboard'); Route::middleware('auth')->group(function () { + Route::get('/users', [UserController::class, 'index'])->name('users.index'); + Route::get('/roles', [RoleController::class, 'index'])->name('roles.index'); Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');