feat(admin): preserve list return target for back and close actions

This commit is contained in:
2026-03-11 23:32:11 +01:00
parent bc9506866f
commit 277168f7e8
24 changed files with 525 additions and 96 deletions

View File

@@ -11,6 +11,9 @@ use MintyPHP\Support\Guard;
$session = app(SessionStoreInterface::class)->all();
Guard::requireLogin();
$request = requestInput();
$returnTarget = requestResolveReturnTarget();
$closeTarget = requestResolveReturnTarget('admin/permissions');
$createTarget = requestPathWithReturnTarget('admin/permissions/create', $returnTarget);
$currentUserId = (int) ($session['user']['id'] ?? 0);
$authorizationService = app(\MintyPHP\Service\Access\AuthorizationService::class);
@@ -31,8 +34,8 @@ $form = [
];
if ($request->isMethod('POST') && !Session::checkCsrfToken()) {
Flash::error(t('Form expired, please try again'), 'admin/permissions/create', 'csrf_expired');
Router::redirect('admin/permissions/create');
Flash::error(t('Form expired, please try again'), $createTarget, 'csrf_expired');
Router::redirect($createTarget);
return;
}
@@ -44,17 +47,17 @@ if ($request->hasBody('key')) {
if (($result['ok'] ?? false) && !$errorBag->hasAny()) {
$action = (string) $request->body('action', 'create');
if ($action === 'create_close') {
Flash::success('Permission created', 'admin/permissions', 'permission_created');
Router::redirect('admin/permissions');
Flash::success('Permission created', $closeTarget, 'permission_created');
Router::redirect($closeTarget);
} else {
$id = (int) ($result['id'] ?? 0);
if ($id > 0) {
$target = "admin/permissions/edit/{$id}";
$target = requestPathWithReturnTarget("admin/permissions/edit/{$id}", $returnTarget);
Flash::success('Permission created', $target, 'permission_created');
Router::redirect($target);
} else {
Flash::success('Permission created', 'admin/permissions', 'permission_created');
Router::redirect('admin/permissions');
Flash::success('Permission created', $closeTarget, 'permission_created');
Router::redirect($closeTarget);
}
}
}

View File

@@ -12,15 +12,18 @@ use MintyPHP\Support\Guard;
$session = app(SessionStoreInterface::class)->all();
Guard::requireLogin();
$request = requestInput();
$returnTarget = requestResolveReturnTarget();
$closeTarget = requestResolveReturnTarget('admin/permissions');
$currentUserId = (int) ($session['user']['id'] ?? 0);
$authorizationService = app(\MintyPHP\Service\Access\AuthorizationService::class);
$id = (int) ($id ?? 0);
$editTarget = requestPathWithReturnTarget("admin/permissions/edit/{$id}", $returnTarget);
$permission = $id > 0 ? app(\MintyPHP\Service\Access\PermissionGateway::class)->find($id) : null;
if (!$permission) {
Flash::error('Permission not found', 'admin/permissions', 'permission_not_found');
Router::redirect('admin/permissions');
Flash::error('Permission not found', $closeTarget, 'permission_not_found');
Router::redirect($closeTarget);
}
$isSystemPermission = (int) ($permission['is_system'] ?? 0) === 1;
$contextDecision = $authorizationService->authorize(PermissionAuthorizationPolicy::ABILITY_ADMIN_PERMISSIONS_EDIT_CONTEXT, [
@@ -46,8 +49,8 @@ $selectedRoleIds = $rolePermissionRepository->listRoleIdsByPermissionId($id);
$previousRoleIds = $selectedRoleIds;
if ($request->isMethod('POST') && !Session::checkCsrfToken()) {
Flash::error(t('Form expired, please try again'), "admin/permissions/edit/{$id}", 'csrf_expired');
Router::redirect("admin/permissions/edit/{$id}");
Flash::error(t('Form expired, please try again'), $editTarget, 'csrf_expired');
Router::redirect($editTarget);
return;
}
@@ -97,11 +100,11 @@ if ($request->hasBody('key')) {
if ($syncSucceeded) {
$action = (string) $request->body('action', 'save');
if ($action === 'save_close') {
Flash::success('Permission updated', 'admin/permissions', 'permission_updated');
Router::redirect('admin/permissions');
Flash::success('Permission updated', $closeTarget, 'permission_updated');
Router::redirect($closeTarget);
} else {
Flash::success('Permission updated', "admin/permissions/edit/{$id}", 'permission_updated');
Router::redirect("admin/permissions/edit/{$id}");
Flash::success('Permission updated', $editTarget, 'permission_updated');
Router::redirect($editTarget);
}
}
}

View File

@@ -1,5 +1,6 @@
<?php
use MintyPHP\Router;
use MintyPHP\Http\Request;
$canCreatePermissions = (bool) ($canCreatePermissions ?? false);
$toolbarFilterSchema = is_array($toolbarFilterSchema ?? null) ? $toolbarFilterSchema : [];
@@ -22,7 +23,7 @@ $listTitle = t('Permissions');
ob_start();
?>
<?php if ($canCreatePermissions): ?>
<a role="button" class="primary" href="admin/permissions/create">
<a role="button" class="primary" href="<?php e(requestPathWithReturnTarget('admin/permissions/create', Request::pathWithQuery())); ?>">
<i class="bi bi-plus"></i> <?php e(t('Create permission')); ?>
</a>
<?php endif; ?>