Set a limit on number of users for group user loading

This commit is contained in:
snipe
2025-11-12 20:19:52 +00:00
parent a7be1acbd8
commit fa2aafe41f
7 changed files with 38 additions and 8 deletions

View File

@@ -197,7 +197,7 @@ REPORT_TIME_LIMIT=12000
API_THROTTLE_PER_MINUTE=120
CSV_ESCAPE_FORMULAS=true
LIVEWIRE_URL_PREFIX=null
MAX_UNPAGINATED=5000
# --------------------------------------------
# OPTIONAL: SAML SETTINGS

View File

@@ -48,7 +48,9 @@ class GroupsController extends Controller
return view('groups/edit', compact('permissions', 'selectedPermissions', 'groupPermissions'))
->with('group', $group)
->with('associated_users', [])
->with('unselected_users', $users);
->with('unselected_users', $users)
->with('all_users_count', $users->count())
;
}
/**
@@ -108,7 +110,13 @@ class GroupsController extends Controller
// Get the unselected users
$unselected_users = \App\Models\User::whereNotIn('id', $associated_users->pluck('id')->toArray())->orderBy('first_name', 'asc')->orderBy('last_name', 'asc')->get();
return view('groups.edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'))->with('associated_users', $associated_users)->with('unselected_users', $unselected_users);
// We need the total to see whether or not we should show the user selection box :(
$all_users_count = $associated_users->count() + $unselected_users->count();
return view('groups.edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'))
->with('associated_users', $associated_users)
->with('unselected_users', $unselected_users)
->with('all_users_count', $all_users_count);
}
/**

View File

@@ -449,4 +449,14 @@ return [
'escape_formulas' => env('CSV_ESCAPE_FORMULAS', true),
/*
|--------------------------------------------------------------------------
| Max Unpaginated Records
|--------------------------------------------------------------------------
| This sets the maximum number of records that can be exported or
| viewed without pagination. This is to prevent server timeouts.
*/
'max_unpaginated_records' => env('MAX_UNPAGINATED', '5000'),
];

View File

@@ -423,6 +423,7 @@ return [
'redirect_url' => 'Redirect URL',
'client_secret' => 'Client Secret',
'client_id' => 'Client ID',
'too_many_users_to_show' => 'The number of users (:count) is larger than the unpaginated record limit (:max). Use the bulk user edit tool to manage group memberships.',
'username_formats' => [
'username_format' => 'Username Format',

View File

@@ -1,5 +1,9 @@
@props([
'icon' => null,
])
<!-- Form Legend Help Component -->
<p class="callout-subtext">
<x-icon type="tip" class="text-info" />
<x-icon type="{{ $icon ?? 'tip' }}" class="text-info" />
{!! $slot !!}
</p>

View File

@@ -1,5 +1,6 @@
@props([
'help_text' => null,
'icon' => null,
])
<!-- Form Legend Component -->
<legend class="callout callout-legend">
@@ -8,7 +9,7 @@
</h4>
@if ($help_text)
<x-form-legend-help>
<x-form-legend-help :icon="$icon">
{!! $help_text !!}
</x-form-legend-help>
@endif

View File

@@ -41,16 +41,19 @@
<fieldset>
<x-form-legend help_text="{{ trans('general.add_users_to_group_help') }}">
<x-form-legend icon="warning" help_text="{{ (isset($all_users_count) && ($all_users_count < config('app.max_unpaginated_records'))) ? trans('general.add_users_to_group_help') : trans('admin/settings/general.too_many_users_to_show', ['count'=> $all_users_count, 'max' => config('app.max_unpaginated_records')]) }}">
{{ trans('general.add_users_to_group') }}
</x-form-legend>
<!-- this is a temp fix for the select2 not working inside modals -->
<div class="form-group">
<div class="col-md-12">
@if(($all_users_count ) && ($all_users_count < config('app.max_unpaginated_records')))
<!-- This hidden input will store the selected user IDs as a comma-separated string to avoid max_input_vars and max_multipart_body_parts php.ini issues -->
<input type="hidden" name="users_to_sync" id="hidden_ids_box" class="form-control" value="{{ ($associated_users && is_array($associated_users)) ? implode(",", $associated_users->pluck('id')->toArray()) : '' }}"/>
@@ -95,9 +98,12 @@
</div>
</div>
</div>
</div>
</fieldset>
@endif
<div class="col-md-12">
@include ('partials.forms.edit.permissions-base', ['use_inherit' => false])