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');
|
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']);
|
$roles = Role::with('permissions:id,slug,name')->orderBy('name')->get(['id', 'name', 'slug']);
|
||||||
$permissions = Permission::orderBy('slug')->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}");
|
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',
|
'email',
|
||||||
'password',
|
'password',
|
||||||
'active',
|
'active',
|
||||||
|
'login_redirect',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
use App\Actions\Fortify\ResetUserPassword;
|
use App\Actions\Fortify\ResetUserPassword;
|
||||||
use App\Actions\Fortify\UpdateUserPassword;
|
use App\Actions\Fortify\UpdateUserPassword;
|
||||||
use App\Actions\Fortify\UpdateUserProfileInformation;
|
use App\Actions\Fortify\UpdateUserProfileInformation;
|
||||||
|
use App\Http\Responses\LoginResponse;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Cache\RateLimiting\Limit;
|
use Illuminate\Cache\RateLimiting\Limit;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
@ -14,6 +15,7 @@
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
|
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
|
||||||
use Laravel\Fortify\Fortify;
|
use Laravel\Fortify\Fortify;
|
||||||
|
|
||||||
class FortifyServiceProvider extends ServiceProvider
|
class FortifyServiceProvider extends ServiceProvider
|
||||||
|
|
@ -23,7 +25,7 @@ class FortifyServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function register(): void
|
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 AdminLayout from "@/Layouts/AdminLayout.vue";
|
||||||
import { useForm, Link, router } from "@inertiajs/vue3";
|
import { useForm, Link, router } from "@inertiajs/vue3";
|
||||||
import { ref, computed } from "vue";
|
import { ref, computed } from "vue";
|
||||||
import { SearchIcon, SaveIcon, UserPlusIcon } from "lucide-vue-next";
|
import { SearchIcon, SaveIcon, UserPlusIcon, Link2Icon } from "lucide-vue-next";
|
||||||
import {
|
import {
|
||||||
Card,
|
Card,
|
||||||
CardContent,
|
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) {
|
function toggle(userId, roleId) {
|
||||||
const form = forms[userId];
|
const form = forms[userId];
|
||||||
const exists = form.roles.includes(roleId);
|
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>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -254,6 +267,24 @@ function toggleUserActive(userId) {
|
||||||
<div class="text-xs text-muted-foreground font-mono">
|
<div class="text-xs text-muted-foreground font-mono">
|
||||||
{{ user.email }}
|
{{ user.email }}
|
||||||
</div>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,7 @@
|
||||||
Route::post('users', [\App\Http\Controllers\Admin\UserRoleController::class, 'store'])->name('users.store');
|
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::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}/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
|
// Permissions management
|
||||||
Route::get('permissions', [\App\Http\Controllers\Admin\PermissionController::class, 'index'])->name('permissions.index');
|
Route::get('permissions', [\App\Http\Controllers\Admin\PermissionController::class, 'index'])->name('permissions.index');
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user