diff --git a/app/Http/Controllers/Admin/UserRoleController.php b/app/Http/Controllers/Admin/UserRoleController.php index 45c1fb0..76fbe48 100644 --- a/app/Http/Controllers/Admin/UserRoleController.php +++ b/app/Http/Controllers/Admin/UserRoleController.php @@ -20,7 +20,7 @@ public function index(Request $request): Response { Gate::authorize('manage-settings'); - $users = User::with('roles:id,slug,name')->orderBy('name')->get(['id', 'name', 'email', 'active']); + $users = User::with('roles:id,slug,name')->orderBy('name')->get(['id', 'name', 'email', 'active', 'login_redirect']); $roles = Role::with('permissions:id,slug,name')->orderBy('name')->get(['id', 'name', 'slug']); $permissions = Permission::orderBy('slug')->get(['id', 'name', 'slug']); @@ -73,4 +73,17 @@ public function toggleActive(User $user): RedirectResponse return back()->with('success', "Uporabnik {$status}"); } + + public function updateSettings(Request $request, User $user): RedirectResponse + { + Gate::authorize('manage-settings'); + + $validated = $request->validate([ + 'login_redirect' => ['nullable', 'string', 'max:255'], + ]); + + $user->update($validated); + + return back()->with('success', 'Nastavitve shranjene'); + } } diff --git a/app/Http/Responses/LoginResponse.php b/app/Http/Responses/LoginResponse.php new file mode 100644 index 0000000..2447cfc --- /dev/null +++ b/app/Http/Responses/LoginResponse.php @@ -0,0 +1,17 @@ +user(); + $default = $user?->login_redirect ?: config('fortify.home'); + + return redirect()->intended($default); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 2fda698..c40e0ee 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -31,6 +31,7 @@ class User extends Authenticatable 'email', 'password', 'active', + 'login_redirect', ]; /** diff --git a/app/Providers/FortifyServiceProvider.php b/app/Providers/FortifyServiceProvider.php index e742949..f0e96d2 100644 --- a/app/Providers/FortifyServiceProvider.php +++ b/app/Providers/FortifyServiceProvider.php @@ -6,6 +6,7 @@ use App\Actions\Fortify\ResetUserPassword; use App\Actions\Fortify\UpdateUserPassword; use App\Actions\Fortify\UpdateUserProfileInformation; +use App\Http\Responses\LoginResponse; use App\Models\User; use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Http\Request; @@ -14,6 +15,7 @@ use Illuminate\Support\ServiceProvider; use Illuminate\Support\Str; use Illuminate\Validation\ValidationException; +use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract; use Laravel\Fortify\Fortify; class FortifyServiceProvider extends ServiceProvider @@ -23,7 +25,7 @@ class FortifyServiceProvider extends ServiceProvider */ public function register(): void { - // + $this->app->singleton(LoginResponseContract::class, LoginResponse::class); } /** diff --git a/database/migrations/2026_04_21_201043_add_login_redirect_to_users_table.php b/database/migrations/2026_04_21_201043_add_login_redirect_to_users_table.php new file mode 100644 index 0000000..972b503 --- /dev/null +++ b/database/migrations/2026_04_21_201043_add_login_redirect_to_users_table.php @@ -0,0 +1,28 @@ +string('login_redirect')->nullable()->after('active'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('login_redirect'); + }); + } +}; diff --git a/resources/js/Pages/Admin/Users/Index.vue b/resources/js/Pages/Admin/Users/Index.vue index b49bdca..ffaf8cd 100644 --- a/resources/js/Pages/Admin/Users/Index.vue +++ b/resources/js/Pages/Admin/Users/Index.vue @@ -2,7 +2,7 @@ import AdminLayout from "@/Layouts/AdminLayout.vue"; import { useForm, Link, router } from "@inertiajs/vue3"; import { ref, computed } from "vue"; -import { SearchIcon, SaveIcon, UserPlusIcon } from "lucide-vue-next"; +import { SearchIcon, SaveIcon, UserPlusIcon, Link2Icon } from "lucide-vue-next"; import { Card, CardContent, @@ -48,6 +48,13 @@ const forms = Object.fromEntries( ]) ); +const settingsForms = Object.fromEntries( + props.users.map((u) => [ + u.id, + useForm({ login_redirect: u.login_redirect ?? "" }), + ]) +); + function toggle(userId, roleId) { const form = forms[userId]; const exists = form.roles.includes(roleId); @@ -140,6 +147,12 @@ function toggleUserActive(userId) { } ); } + +function submitSettings(userId) { + settingsForms[userId].patch(route("admin.users.settings", { user: userId }), { + preserveScroll: true, + }); +}