3
0
mirror of https://github.com/snipe/snipe-it.git synced 2025-10-29 11:21:21 +00:00

Starter improvements - needs testing

This commit is contained in:
snipe 2025-10-20 15:48:49 +01:00
parent 15948370d4
commit 889cbc69e1
4 changed files with 185 additions and 164 deletions

View File

@ -88,7 +88,10 @@ class GroupsController extends Controller
$groupPermissions = [];
}
$selected_array = Helper::selectedPermissionsArray($permissions, $groupPermissions);
return view('groups.edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'));
$associated_users = $group->users()->get();
//dd($associated_users->toArray());
return view('groups.edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'))->with('associated_users', $associated_users);
}
/**
@ -105,8 +108,11 @@ class GroupsController extends Controller
$group->permissions = json_encode($request->input('permission'));
$group->notes = $request->input('notes');
\Log::error(print_r($request->input('associated_users'), true));
if (! config('app.lock_passwords')) {
if ($group->save()) {
$group->users()->sync($request->input('associated_users'));
return redirect()->route('groups.index')->with('success', trans('admin/groups/message.success.update'));
}

View File

@ -9,11 +9,11 @@
return [
'Global' => [
'Superuser' => [
[
'permission' => 'superuser',
'label' => 'Super User',
'note' => 'Determines whether the user has full access to all aspects of the admin. This setting overrides any more specific permissions throughout the system. ',
'note' => 'Determines whether the user has full access to all aspects of the admin. This setting overrides ALL more specific and restrictive permissions throughout the system. ',
'display' => true,
],
],
@ -22,7 +22,7 @@ return [
[
'permission' => 'admin',
'label' => '',
'note' => 'Determines whether the user has access to most aspects of the admin. ',
'note' => 'Determines whether the user has access to most aspects of the system EXCEPT the Admin Settings. These users will be able to manage users, locations, categories, etc, but ARE constrained by Full Multiple Company Support if it is enabled.',
'display' => true,
],
],

View File

@ -7,63 +7,25 @@
])
@section('content')
<style>
.form-horizontal .control-label {
padding-top: 0px;
}
input[type='text'][disabled], input[disabled], textarea[disabled], input[readonly], textarea[readonly], .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
background-color: white;
color: #555555;
cursor:text;
}
table.permissions {
display:flex;
flex-direction: column;
}
.permissions.table > thead, .permissions.table > tbody {
margin: 15px;
margin-top: 0px;
}
.permissions.table > tbody {
border: 1px solid;
}
.header-row {
border-bottom: 1px solid #ccc;
}
.permissions-row {
display: flex;
justify-content: space-between;
align-items: center;
}
.table > tbody > tr > td.permissions-item {
padding: 1px;
padding-left: 8px;
}
.header-name {
cursor: pointer;
}
</style>
@parent
@stop
@section('inputFields')
<!-- Name -->
<div class="form-group {{ $errors->has('name') ? ' has-error' : '' }}">
<label for="name" class="col-md-2 control-label">{{ trans('admin/groups/titles.group_name') }}</label>
<div class="col-md-9 required">
<label for="name" class="col-md-3 control-label">{{ trans('admin/groups/titles.group_name') }}</label>
<div class="col-md-8 required">
<input class="form-control" type="text" name="name" id="name" value="{{ old('name', $group->name) }}" required />
{!! $errors->first('name', '<span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span>') !!}
</div>
</div>
<div class="form-group{!! $errors->has('notes') ? ' has-error' : '' !!}">
<label for="notes" class="col-md-2 control-label">{{ trans('general.notes') }}</label>
<div class="col-md-9">
<label for="notes" class="col-md-3 control-label">{{ trans('general.notes') }}</label>
<div class="col-md-8">
<x-input.textarea
name="notes"
id="notes"
@ -77,131 +39,159 @@
</div>
</div>
<div class="form-group{{ $errors->has('associated_users') ? ' has-error' : '' }}">
<label for="associated_users[]" class="col-md-3 control-label">
{{ trans('general.users') }}
</label>
<div class="col-md-7">
<select class="js-data-ajax"
data-endpoint="users"
data-placeholder="{{ trans('general.select_user') }}"
name="associated_users[]"
style="width: 100%"
id="associated_users[]"
aria-label="associated_users[]" multiple>
<option value="" role="option">{{ trans('general.select_user') }}</option>
@if(isset($associated_users))
@foreach($associated_users as $associated_user)
<option value="{{ $associated_user->id }}" selected="selected" role="option" aria-selected="true"
role="option">
{{ $associated_user->present()->fullName }} ({{ $associated_user->username }})
</option>
@endforeach
@endif
</select>
</div>
{!! $errors->first('associated_users', '<div class="col-md-8 col-md-offset-3"><span class="alert-msg" aria-hidden="true"><i class="fas fa-times" aria-hidden="true"></i> :message</span></div>') !!}
</div>
<div class="col-md-12">
<div class="col-md-10">
<h4>{{ trans('admin/groups/titles.permission')}}</h4>
</div>
<div class="col-md-1 text-right">
<h4>{{ trans('admin/groups/titles.grant')}}</h4>
</div>
<div class="col-md-1 text-right">
<h4>{{ trans('admin/groups/titles.deny')}}</h4>
</div>
</div>
<table class="table table-striped permissions">
<thead>
<tr class="permissions-row">
<th class="col-md-5">{{ trans('admin/groups/titles.permission')}}</th>
<th class="col-md-1">{{ trans('admin/groups/titles.grant')}}</th>
<th class="col-md-1">{{ trans('admin/groups/titles.deny')}}</th>
</tr>
</thead>
@foreach ($permissions as $area => $area_permission)
<!-- handle superadmin and reports, and anything else with only one option -->
<?php $localPermission = $area_permission[0]; ?>
@if (count($area_permission) == 1)
<tbody class="permissions-group">
<tr class="header-row permissions-row">
<td class="col-md-5 tooltip-base permissions-item"
data-tooltip="true"
data-placement="right"
title="{{ $localPermission['note'] }}">
@unless (empty($localPermission['label']))
<h2>{{ $area . ': ' . $localPermission['label'] }}</h2>
@else
<h2>{{ $area }}</h2>
@endunless
</td>
<td class="col-md-1 permissions-item">
<label for="{{ 'permission['.$localPermission['permission'].']' }}" style="form-control"><span class="sr-only">{{ trans('admin/groups/titles.allow')}} {{ 'permission['.$localPermission['permission'].']' }}</span></label>
<input
value="1"
aria-label="permission[{{ $localPermission['permission'] }}]"
@checked(array_key_exists($localPermission['permission'], $groupPermissions) && $groupPermissions[$localPermission['permission']] == '1')
name="permission[{{ $localPermission['permission'] }}]"
type="radio"
>
</td>
<td class="col-md-1 permissions-item">
<label for="{{ 'permission['.$localPermission['permission'].']' }}"><span class="sr-only">{{ trans('admin/groups/titles.deny')}} {{ 'permission['.$localPermission['permission'].']' }}</span></label>
<input
value="0"
aria-label="permission[{{ $localPermission['permission'] }}]"
@checked(array_key_exists($localPermission['permission'], $groupPermissions) && $groupPermissions[$localPermission['permission']] == '0')
name="permission[{{ $localPermission['permission'] }}]"
type="radio"
>
</td>
</tr>
</tbody>
@else
<tbody class="permission-group">
<tr class="header-row permissions-row">
<td class="col-md-5 tooltip-base permissions-item header-name"
data-tooltip="true"
data-placement="right"
title="{{ $localPermission['note'] }}">
<h2>{{ $area }}</h2>
<div class="col-md-12">
@foreach ($permissions as $area => $area_permission)
<!-- handle superadmin and reports, and anything else with only one option -->
<?php $localPermission = $area_permission[0]; ?>
<div class="form-group{{ ($localPermission['permission']!='superuser') ? ' nonsuperuser' : '' }}{{ ( ($localPermission['permission']!='superuser') && ($localPermission['permission']!='admin')) ? ' nonadmin' : '' }}">
<div class="callout callout-legend col-md-12">
<div class="col-md-10">
<h4>
{{ $area }}
</h4>
@if ($localPermission['note']!='')
<p>{{ $localPermission['note'] }}</p>
@endif
</td>
<td class="col-md-1 permissions-item" style="vertical-align: bottom">
<label for="{{ $area }}"><span class="sr-only">{{ trans('admin/groups/titles.allow')}} {{ $area }}</span></label>
</div>
<!-- Handle the checkall ALLOW radios -->
<div class="col-md-1 text-right header-row">
<label for="{{ $area }}">
<input
value="1"
data-checker-group="{{ str_slug($area) }}"
aria-label="{{ $area }}"
name="{{ $area }}"
type="radio"
class="form-control {{ str_slug($area) }}"
data-checker-group="{{ str_slug($area) }}"
aria-label="{{ $area }}"
name="permission[{{ str_slug($area) }}]"
type="radio"
value="1"
>
</td>
<td class="col-md-1 permissions-item">
<label for="{{ $area }}"><span class="sr-only">{{ trans('admin/groups/titles.deny')}} {{ $area }}</span></label>
<span class="sr-only">
{{ trans('admin/groups/titles.allow')}}
{{ $area }}
</span>
</label>
</div>
<!-- Handle the checkall DENY radios -->
<div class="col-md-1 header-row text-right">
<label>
<input
value="0"
data-checker-group="{{ str_slug($area) }}"
aria-label="{{ $area }}"
name="{{ $area }}"
type="radio"
class="form-control {{ str_slug($area) }}"
data-checker-group="{{ str_slug($area) }}"
aria-label="{{ $area }}"
name="permission[{{ str_slug($area) }}]"
type="radio"
value="0"
>
</td>
</tr>
<span class="sr-only">
{{ trans('admin/groups/titles.deny')}}
{{ $area }}
</span>
</label>
</div>
</div>
</div>
@if (count($area_permission) > 1)
@foreach ($area_permission as $index => $this_permission)
@if ($this_permission['display'])
<tr class="permissions-row">
<td
class="col-md-5 tooltip-base permissions-item"
data-tooltip="true"
data-placement="right"
title="{{ $this_permission['note'] }}">
{{ $this_permission['label'] }}
</td>
<td class="col-md-1 permissions-item">
<label for="{{ 'permission['.$this_permission['permission'].']' }}"><span class="sr-only">{{ trans('admin/groups/titles.allow')}} {{ 'permission['.$this_permission['permission'].']' }}</span></label>
<div class="{{ ($localPermission['permission']!='superuser') ? ' nonsuperuser' : '' }}{{ ( ($localPermission['permission']!='superuser') && ($localPermission['permission']!='admin')) ? ' nonadmin' : '' }}">
<div class="form-group" style="border-bottom: 1px solid #eee; margin-right: 15px;">
<div class="col-md-10">
{{ $this_permission['label'] }}
</div>
<div class="col-md-1 text-right">
<label for="{{ 'permission['.$this_permission['permission'].']' }}">
<input
class="form-control radiochecker-{{ str_slug($area) }}"
aria-label="permission[{{ $this_permission['permission'] }}]"
@checked(array_key_exists($this_permission['permission'], $groupPermissions) && $groupPermissions[$this_permission['permission']] == '1')
name="permission[{{ $this_permission['permission'] }}]"
type="radio"
value="1"
>
<span class="sr-only">{{ trans('admin/groups/titles.allow')}}
{{ 'permission['.$this_permission['permission'].']' }}
</span>
</label>
</div>
<div class="col-md-1 text-right">
<label for="{{ 'permission['.$this_permission['permission'].']' }}">
<input
class="radiochecker-{{ str_slug($area) }}"
aria-label="permission[{{ $this_permission['permission'] }}]"
@checked(array_key_exists($this_permission['permission'], $groupPermissions) && $groupPermissions[$this_permission['permission']] == '1')
name="permission[{{ $this_permission['permission'] }}]"
type="radio"
value="1"
>
</td>
<td class="col-md-1 permissions-item">
<label for="{{ 'permission['.$this_permission['permission'].']' }}"><span class="sr-only">{{ trans('admin/groups/titles.deny')}} {{ 'permission['.$this_permission['permission'].']' }}</span></label>
<input
class="radiochecker-{{ str_slug($area) }}"
class="form-control radiochecker-{{ str_slug($area) }}"
aria-label="permission[{{ $this_permission['permission'] }}]"
@checked(array_key_exists($this_permission['permission'], $groupPermissions) && $groupPermissions[$this_permission['permission']] == '0')
name="permission[{{ $this_permission['permission'] }}]"
type="radio"
value="0"
>
</td>
</tr>
@endif
</label>
</div>
</div>
</div>
@endif
@endforeach
@endif
@endif
</tbody>
@endforeach
</table>
@endforeach
</div>
@stop
@section('moar_scripts')
@ -209,26 +199,29 @@
$(document).ready(function(){
$('.tooltip-base').tooltip({container: 'body'});
$(".superuser").change(function() {
var perms = $(this).val();
if (perms =='1') {
$("#nonadmin").hide();
} else {
$("#nonadmin").show();
if ($(this).val() == '1') {
$(".nonsuperuser").fadeOut();
} else if ($(this).val() == '0') {
$(".nonsuperuser").fadeIn();
}
});
// Check/Uncheck all radio buttons in the group
$('tr.header-row input:radio').change(function() {
value = $(this).attr('value');
area = $(this).data('checker-group');
$('.radiochecker-'+area+'[value='+value+']').prop('checked', true);
$(".admin").change(function() {
if ($(this).val() == '1') {
$(".nonadmin").fadeOut();
} else if ($(this).val() == '0') {
$(".nonadmin").fadeIn();
}
});
$('.header-name').click(function() {
$(this).parent().nextUntil('tr.header-row').slideToggle(500);
// Check/Uncheck all radio buttons in the group
$('.header-row input:radio').change(function() {
value = $(this).attr('value');
area = $(this).data('checker-group');
$('.radiochecker-'+area+'[value='+value+']').prop('checked', true);
});

View File

@ -294,6 +294,28 @@
@endcan
@can('create', \App\Models\Groups::class)
// Groups table buttons
window.groupButtons = () => ({
btnAdd: {
text: '{{ trans('general.create') }}',
icon: 'fa fa-plus',
event () {
window.location.href = '{{ route('groups.create') }}';
},
attributes: {
class: 'btn-info',
title: '{{ trans('general.create') }}',
@if ($snipeSettings->shortcuts_enabled == 1)
accesskey: 'n'
@endif
}
},
}); // End Groups table buttons
@endcan
// Asset table buttons
window.assetButtons = () => ({
@can('create', \App\Models\Asset::class)