Users custome login redirect
This commit is contained in:
parent
054202dc32
commit
fd81e8ce2d
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
17
app/Http/Responses/LoginResponse.php
Normal file
17
app/Http/Responses/LoginResponse.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Responses;
|
||||
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
|
||||
|
||||
class LoginResponse implements LoginResponseContract
|
||||
{
|
||||
public function toResponse($request): RedirectResponse
|
||||
{
|
||||
$user = $request->user();
|
||||
$default = $user?->login_redirect ?: config('fortify.home');
|
||||
|
||||
return redirect()->intended($default);
|
||||
}
|
||||
}
|
||||
|
|
@ -31,6 +31,7 @@ class User extends Authenticatable
|
|||
'email',
|
||||
'password',
|
||||
'active',
|
||||
'login_redirect',
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->string('login_redirect')->nullable()->after('active');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->dropColumn('login_redirect');
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -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,
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
|
@ -254,6 +267,24 @@ function toggleUserActive(userId) {
|
|||
<div class="text-xs text-muted-foreground font-mono">
|
||||
{{ user.email }}
|
||||
</div>
|
||||
<div class="flex items-center gap-1 mt-1.5">
|
||||
<Link2Icon class="h-3 w-3 text-muted-foreground shrink-0" />
|
||||
<Input
|
||||
v-model="settingsForms[user.id].login_redirect"
|
||||
type="text"
|
||||
placeholder="/dashboard"
|
||||
class="h-6 text-xs px-1.5 w-36"
|
||||
/>
|
||||
<Button
|
||||
@click="submitSettings(user.id)"
|
||||
:disabled="settingsForms[user.id].processing"
|
||||
size="sm"
|
||||
variant="ghost"
|
||||
class="h-6 px-2 text-xs"
|
||||
>
|
||||
<SaveIcon class="h-3 w-3" />
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</TableCell>
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@
|
|||
Route::post('users', [\App\Http\Controllers\Admin\UserRoleController::class, 'store'])->name('users.store');
|
||||
Route::put('users/{user}', [\App\Http\Controllers\Admin\UserRoleController::class, 'update'])->name('users.update');
|
||||
Route::patch('users/{user}/toggle-active', [\App\Http\Controllers\Admin\UserRoleController::class, 'toggleActive'])->name('users.toggle-active');
|
||||
Route::patch('users/{user}/settings', [\App\Http\Controllers\Admin\UserRoleController::class, 'updateSettings'])->name('users.settings');
|
||||
|
||||
// Permissions management
|
||||
Route::get('permissions', [\App\Http\Controllers\Admin\PermissionController::class, 'index'])->name('permissions.index');
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user