Implement admin and user management foundation

This commit is contained in:
2026-03-25 00:38:30 +01:00
parent 9d90bde323
commit aeee3d2640
17 changed files with 505 additions and 25 deletions
@@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\UpdateUserAdminStatusRequest;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Inertia\Inertia;
use Inertia\Response;
class UserManagementController extends Controller
{
public function index(): Response
{
return Inertia::render('admin/users/Index', [
'status' => session('status'),
'users' => User::query()
->orderByDesc('is_admin')
->orderBy('name')
->get(),
]);
}
public function update(UpdateUserAdminStatusRequest $request, User $user): RedirectResponse
{
$user->forceFill([
'is_admin' => $request->boolean('is_admin'),
])->save();
$status = $user->is_admin
? "{$user->name} now has admin access."
: "{$user->name} no longer has admin access.";
return to_route('admin.users.index')->with('status', $status);
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests\Admin;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest;
class UpdateUserAdminStatusRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return $this->user()?->is_admin === true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'is_admin' => ['required', 'boolean'],
];
}
}
+1
View File
@@ -27,6 +27,7 @@ class User extends Authenticatable
{
return [
'email_verified_at' => 'datetime',
'is_admin' => 'boolean',
'password' => 'hashed',
'two_factor_confirmed_at' => 'datetime',
];
+11
View File
@@ -2,9 +2,11 @@
namespace App\Providers;
use App\Models\User;
use Carbon\CarbonImmutable;
use Illuminate\Support\Facades\Date;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;
use Illuminate\Validation\Rules\Password;
@@ -23,9 +25,18 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot(): void
{
$this->configureAuthorization();
$this->configureDefaults();
}
/**
* Configure authorization behaviors.
*/
protected function configureAuthorization(): void
{
Gate::define('access-admin', fn (User $user): bool => $user->is_admin);
}
/**
* Configure default behaviors for production-ready applications.
*/