Role, Uzytkownicy - poprawki

Dodawanie uzytkownika z modułu Uzytkownicy

Skasowania Register na stronei głównej
This commit is contained in:
Tomasz Boruc 2026-08-24 20:44:58 +02:00
parent d9f4db73c5
commit f376bde1b5
7 changed files with 71 additions and 18 deletions

View File

@ -5,6 +5,8 @@ namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules;
use Illuminate\Support\Facades\Hash;
use Spatie\Permission\Models\Role;
class UserController extends Controller
@ -19,6 +21,43 @@ class UserController extends Controller
return view('users.index', compact('users'));
}
/**
* Formularz dodawania nowego użytkownika.
* Wykorzystuje gotowy widok z Breeze (auth.register).
*/
public function create()
{
$roles = Role::all();
return view('auth.register', compact('roles'));
}
/**
* Zapis nowego użytkownika i przypisanie ról.
*/
public function store(Request $request)
{
$validated = $request->validate([
'name' => ['required', 'string', 'max:255'],
'surname' => ['required', 'string', 'max:255'],
'email' => ['required', 'email', 'max:255', Rule::unique('users')],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
'role' => ['required', 'string', 'exists:roles,name'], // Zmiana z roles na role
]);
$user = User::create([
'name' => $validated['name'],
'surname' => $validated['surname'],
'email' => $validated['email'],
'password' => Hash::make($validated['password']),
]);
// Przypisanie wybranej roli
$user->assignRole($validated['role']);
return redirect()->route('users.index')->with('status', 'Użytkownik został pomyślnie dodany.');
}
/**
* Formularz edycji wybranego użytkownika.
*/
@ -48,7 +87,6 @@ class UserController extends Controller
'email' => $validated['email'],
]);
// Synchronizuje przekazane role (jeśli nic nie zaznaczono, przekazuje pustą tablicę)
$user->syncRoles($request->input('roles', []));
return redirect()->route('users.index')->with('status', 'Użytkownik został zaktualizowany.');

View File

@ -33,11 +33,14 @@ class DatabaseSeeder extends Seeder
$adminRole = Role::firstOrCreate(['name' => 'admin']);
$kierownikRole = Role::firstOrCreate(['name' => 'kierownik']);
$pracownikRole = Role::firstOrCreate(['name' => 'pracownik']);
// 3. Przypisywanie uprawnień do ról
$adminRole->syncPermissions(Permission::all());
$kierownikRole->syncPermissions([
'users_access',
'raporty_access',
'flota_access',
'zaliczki_access',

View File

@ -21,8 +21,8 @@ class UserSeeder extends Seeder
// 1. Domyślne konta testowe
$admin = User::factory()->create([
'name' => 'Jan',
'surname' => 'Admin',
'name' => 'Json',
'surname' => 'John',
'email' => 'a@a.com',
'password' => Hash::make('123'),
]);

View File

@ -1,10 +1,10 @@
<x-guest-layout>
<form method="POST" action="{{ route('register') }}">
@csrf
<form method="POST" action="{{ isset($roles) ? route('users.store') : route('register') }}">
@csrf
<!-- Name -->
<div>
<x-input-label for="name" :value="__('Name')" />
<x-input-label for="name" :value="__('Imię')" />
<x-text-input id="name" class="block mt-1 w-full" type="text" name="name" :value="old('name')" required autofocus autocomplete="name" />
<x-input-error :messages="$errors->get('name')" class="mt-2" />
</div>
@ -24,11 +24,12 @@
</div>
<!-- Select Role (Dynamic) -->
@isset($roles)
<div class="mt-4">
<x-input-label for="role" :value="__('Rola')" />
<select id="role" name="role" class="block mt-1 w-full border-gray-300 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300 focus:border-indigo-500 dark:focus:border-indigo-600 focus:ring-indigo-500 dark:focus:ring-indigo-600 rounded-md shadow-sm" required>
<option value="" disabled selected>-- Wybierz rolę --</option>
<option value="" disabled {{ old('role') ? '' : 'selected' }}>-- Wybierz rolę --</option>
@foreach($roles as $role)
<option value="{{ $role->name }}" {{ old('role') === $role->name ? 'selected' : '' }}>
{{ ucfirst($role->name) }}
@ -38,10 +39,11 @@
<x-input-error :messages="$errors->get('role')" class="mt-2" />
</div>
@endisset
<!-- Password -->
<div class="mt-4">
<x-input-label for="password" :value="__('Password')" />
<x-input-label for="password" :value="__('Hasło')" />
<x-text-input id="password" class="block mt-1 w-full"
type="password"
@ -53,7 +55,7 @@
<!-- Confirm Password -->
<div class="mt-4">
<x-input-label for="password_confirmation" :value="__('Confirm Password')" />
<x-input-label for="password_confirmation" :value="__('Powtórz Hasło')" />
<x-text-input id="password_confirmation" class="block mt-1 w-full"
type="password"
@ -68,7 +70,7 @@
</a>
<x-primary-button class="ms-4">
{{ __('Register') }}
{{ __('Zapisz') }}
</x-primary-button>
</div>
</form>

View File

@ -1,9 +1,22 @@
<x-app-layout>
<x-slot name="header">
<x-slot name="header">
<div class="flex items-center justify-between">
<h2 class="font-semibold text-xl text-white leading-tight">
{{ __('Zarządzanie Użytkownikami') }}
{{ __('Lista użytkowników') }}
</h2>
</x-slot>
{{-- Dostęp tylko dla Admina i Kierownika --}}
@hasanyrole('admin|kierownik')
<a href="{{ route('users.create') }}"
class="inline-flex items-center px-4 py-2 bg-indigo-600 hover:bg-indigo-500 text-white text-sm font-medium rounded-md shadow-sm transition ease-in-out duration-150 gap-2">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4" />
</svg>
<span>{{ __('Dodaj użytkownika') }}</span>
</a>
@endhasanyrole
</div>
</x-slot>
<!-- Styl do wymuszenia powiększonych badge'y i efektu hover niezależnie od Vite/Tailwind -->
<style>

View File

@ -51,11 +51,6 @@
Zaloguj
</a>
@if (Route::has('register'))
<a href="{{ route('register') }}" class="text-sm font-semibold text-white bg-indigo-600 hover:bg-indigo-500 transition-all py-2 px-4 rounded-xl shadow-lg shadow-indigo-500/20 hover:shadow-indigo-500/30">
Zarejestruj
</a>
@endif
@endauth
@else
<!-- Domyślne przyciski (gdy trasy autoryzacji nie jeszcze zdefiniowane) -->

View File

@ -23,6 +23,8 @@ Route::middleware(['auth', 'verified'])->group(function () {
// Zarządzanie użytkownikami (tylko dla posiadaczy uprawnienia users_access)
Route::middleware(['can:users_access'])->group(function () {
Route::get('/users', [UserController::class, 'index'])->name('users.index');
Route::get('/users/create', [UserController::class, 'create'])->name('users.create');
Route::post('/users', [UserController::class, 'store'])->name('users.store');
Route::get('/users/{user}/edit', [UserController::class, 'edit'])->name('users.edit');
Route::put('/users/{user}', [UserController::class, 'update'])->name('users.update');
Route::delete('/users/{user}', [UserController::class, 'destroy'])->name('users.destroy');