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 App\Models\User;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
|
use Illuminate\Validation\Rules;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Spatie\Permission\Models\Role;
|
use Spatie\Permission\Models\Role;
|
||||||
|
|
||||||
class UserController extends Controller
|
class UserController extends Controller
|
||||||
@ -19,6 +21,43 @@ class UserController extends Controller
|
|||||||
return view('users.index', compact('users'));
|
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.
|
* Formularz edycji wybranego użytkownika.
|
||||||
*/
|
*/
|
||||||
@ -48,7 +87,6 @@ class UserController extends Controller
|
|||||||
'email' => $validated['email'],
|
'email' => $validated['email'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Synchronizuje przekazane role (jeśli nic nie zaznaczono, przekazuje pustą tablicę)
|
|
||||||
$user->syncRoles($request->input('roles', []));
|
$user->syncRoles($request->input('roles', []));
|
||||||
|
|
||||||
return redirect()->route('users.index')->with('status', 'Użytkownik został zaktualizowany.');
|
return redirect()->route('users.index')->with('status', 'Użytkownik został zaktualizowany.');
|
||||||
|
|||||||
@ -34,10 +34,13 @@ class DatabaseSeeder extends Seeder
|
|||||||
$kierownikRole = Role::firstOrCreate(['name' => 'kierownik']);
|
$kierownikRole = Role::firstOrCreate(['name' => 'kierownik']);
|
||||||
$pracownikRole = Role::firstOrCreate(['name' => 'pracownik']);
|
$pracownikRole = Role::firstOrCreate(['name' => 'pracownik']);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 3. Przypisywanie uprawnień do ról
|
// 3. Przypisywanie uprawnień do ról
|
||||||
$adminRole->syncPermissions(Permission::all());
|
$adminRole->syncPermissions(Permission::all());
|
||||||
|
|
||||||
$kierownikRole->syncPermissions([
|
$kierownikRole->syncPermissions([
|
||||||
|
'users_access',
|
||||||
'raporty_access',
|
'raporty_access',
|
||||||
'flota_access',
|
'flota_access',
|
||||||
'zaliczki_access',
|
'zaliczki_access',
|
||||||
|
|||||||
@ -21,8 +21,8 @@ class UserSeeder extends Seeder
|
|||||||
|
|
||||||
// 1. Domyślne konta testowe
|
// 1. Domyślne konta testowe
|
||||||
$admin = User::factory()->create([
|
$admin = User::factory()->create([
|
||||||
'name' => 'Jan',
|
'name' => 'Json',
|
||||||
'surname' => 'Admin',
|
'surname' => 'John',
|
||||||
'email' => 'a@a.com',
|
'email' => 'a@a.com',
|
||||||
'password' => Hash::make('123'),
|
'password' => Hash::make('123'),
|
||||||
]);
|
]);
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
<x-guest-layout>
|
<x-guest-layout>
|
||||||
<form method="POST" action="{{ route('register') }}">
|
<form method="POST" action="{{ isset($roles) ? route('users.store') : route('register') }}">
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
<!-- Name -->
|
<!-- Name -->
|
||||||
<div>
|
<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-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" />
|
<x-input-error :messages="$errors->get('name')" class="mt-2" />
|
||||||
</div>
|
</div>
|
||||||
@ -24,11 +24,12 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Select Role (Dynamic) -->
|
<!-- Select Role (Dynamic) -->
|
||||||
|
@isset($roles)
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<x-input-label for="role" :value="__('Rola')" />
|
<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>
|
<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)
|
@foreach($roles as $role)
|
||||||
<option value="{{ $role->name }}" {{ old('role') === $role->name ? 'selected' : '' }}>
|
<option value="{{ $role->name }}" {{ old('role') === $role->name ? 'selected' : '' }}>
|
||||||
{{ ucfirst($role->name) }}
|
{{ ucfirst($role->name) }}
|
||||||
@ -38,10 +39,11 @@
|
|||||||
|
|
||||||
<x-input-error :messages="$errors->get('role')" class="mt-2" />
|
<x-input-error :messages="$errors->get('role')" class="mt-2" />
|
||||||
</div>
|
</div>
|
||||||
|
@endisset
|
||||||
|
|
||||||
<!-- Password -->
|
<!-- Password -->
|
||||||
<div class="mt-4">
|
<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"
|
<x-text-input id="password" class="block mt-1 w-full"
|
||||||
type="password"
|
type="password"
|
||||||
@ -53,7 +55,7 @@
|
|||||||
|
|
||||||
<!-- Confirm Password -->
|
<!-- Confirm Password -->
|
||||||
<div class="mt-4">
|
<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"
|
<x-text-input id="password_confirmation" class="block mt-1 w-full"
|
||||||
type="password"
|
type="password"
|
||||||
@ -68,7 +70,7 @@
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
<x-primary-button class="ms-4">
|
<x-primary-button class="ms-4">
|
||||||
{{ __('Register') }}
|
{{ __('Zapisz') }}
|
||||||
</x-primary-button>
|
</x-primary-button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@ -1,9 +1,22 @@
|
|||||||
<x-app-layout>
|
<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">
|
<h2 class="font-semibold text-xl text-white leading-tight">
|
||||||
{{ __('Zarządzanie Użytkownikami') }}
|
{{ __('Lista użytkowników') }}
|
||||||
</h2>
|
</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 -->
|
<!-- Styl do wymuszenia powiększonych badge'y i efektu hover niezależnie od Vite/Tailwind -->
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@ -51,11 +51,6 @@
|
|||||||
Zaloguj
|
Zaloguj
|
||||||
</a>
|
</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
|
@endauth
|
||||||
@else
|
@else
|
||||||
<!-- Domyślne przyciski (gdy trasy autoryzacji nie są jeszcze zdefiniowane) -->
|
<!-- 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)
|
// Zarządzanie użytkownikami (tylko dla posiadaczy uprawnienia users_access)
|
||||||
Route::middleware(['can:users_access'])->group(function () {
|
Route::middleware(['can:users_access'])->group(function () {
|
||||||
Route::get('/users', [UserController::class, 'index'])->name('users.index');
|
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::get('/users/{user}/edit', [UserController::class, 'edit'])->name('users.edit');
|
||||||
Route::put('/users/{user}', [UserController::class, 'update'])->name('users.update');
|
Route::put('/users/{user}', [UserController::class, 'update'])->name('users.update');
|
||||||
Route::delete('/users/{user}', [UserController::class, 'destroy'])->name('users.destroy');
|
Route::delete('/users/{user}', [UserController::class, 'destroy'])->name('users.destroy');
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user