Role, Uzytkownicy - poprawki
Dodawanie uzytkownika z modułu Uzytkownicy Skasowania Register na stronei głównej
This commit is contained in:
parent
d9f4db73c5
commit
f376bde1b5
@ -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.');
|
||||
|
||||
@ -34,10 +34,13 @@ class DatabaseSeeder extends Seeder
|
||||
$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',
|
||||
|
||||
@ -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'),
|
||||
]);
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
<x-guest-layout>
|
||||
<form method="POST" action="{{ route('register') }}">
|
||||
<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>
|
||||
|
||||
@ -1,8 +1,21 @@
|
||||
<x-app-layout>
|
||||
<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>
|
||||
|
||||
{{-- 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 -->
|
||||
|
||||
@ -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 są jeszcze zdefiniowane) -->
|
||||
|
||||
@ -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');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user