feat: implement admin management
This commit is contained in:
@@ -206,27 +206,22 @@
|
||||
<select
|
||||
class="form-control"
|
||||
name="role"
|
||||
id="adminRole"
|
||||
>
|
||||
|
||||
@foreach(\App\Enums\Admin\AdminRole::cases() as $role)
|
||||
|
||||
<option
|
||||
value="{{ $role->value }}"
|
||||
@selected(
|
||||
old('role') == $role->value
|
||||
)
|
||||
@selected(old('role') == $role->value)
|
||||
>
|
||||
{{ $role->label() }}
|
||||
</option>
|
||||
|
||||
@endforeach
|
||||
|
||||
</select>
|
||||
|
||||
@error('role')
|
||||
<span class="text-danger">
|
||||
{{ $message }}
|
||||
</span>
|
||||
{{ $message }}
|
||||
</span>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
@@ -271,7 +266,7 @@
|
||||
|
||||
|
||||
{{-- Permissions --}}
|
||||
<div class="mt-4">
|
||||
<div class="col-xl-12 mt-4">
|
||||
|
||||
<div class="card custom-card">
|
||||
|
||||
@@ -286,14 +281,18 @@
|
||||
<div class="row gy-3">
|
||||
|
||||
@foreach(\App\Enums\Admin\AdminPermission::cases() as $permission)
|
||||
|
||||
<div class="col-xl-3 col-lg-4 col-md-6">
|
||||
|
||||
<div class="form-check">
|
||||
|
||||
<input
|
||||
class="form-check-input"
|
||||
class="form-check-input permission-checkbox"
|
||||
type="checkbox"
|
||||
name="permissions[]"
|
||||
value="{{ $permission->value }}"
|
||||
id="permission_{{ $permission->value }}"
|
||||
data-permission="{{ $permission->value }}"
|
||||
|
||||
@checked(
|
||||
in_array(
|
||||
@@ -318,21 +317,16 @@
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@error('permissions')
|
||||
<div class="mt-2">
|
||||
<span class="text-danger">
|
||||
{{ $message }}
|
||||
</span>
|
||||
</div>
|
||||
<span class="text-danger">
|
||||
{{ $message }}
|
||||
</span>
|
||||
@enderror
|
||||
|
||||
@error('permissions.*')
|
||||
<div class="mt-2">
|
||||
<span class="text-danger">
|
||||
{{ $message }}
|
||||
</span>
|
||||
</div>
|
||||
<span class="text-danger">
|
||||
{{ $message }}
|
||||
</span>
|
||||
@enderror
|
||||
|
||||
</div>
|
||||
@@ -367,6 +361,7 @@
|
||||
onchange="previewAvatar(this)"
|
||||
>
|
||||
|
||||
|
||||
</label>
|
||||
|
||||
</div>
|
||||
@@ -414,27 +409,61 @@
|
||||
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
|
||||
@push('scripts')
|
||||
|
||||
<script>
|
||||
function previewAvatar(input) {
|
||||
|
||||
const preview = document.getElementById('avatarPreview');
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
|
||||
if (input.files && input.files[0]) {
|
||||
const roleSelect = document.getElementById('adminRole');
|
||||
|
||||
const reader = new FileReader();
|
||||
const superAdminRole =
|
||||
@json(\App\Enums\Admin\AdminRole::SUPERADMIN->value);
|
||||
|
||||
reader.onload = function (e) {
|
||||
preview.style.backgroundImage =
|
||||
`url('${e.target.result}')`;
|
||||
};
|
||||
const manageAdminsPermission =
|
||||
@json(\App\Enums\Admin\AdminPermission::MANAGE_ADMINS->value);
|
||||
|
||||
reader.readAsDataURL(input.files[0]);
|
||||
|
||||
function handleAdminPermissions() {
|
||||
|
||||
const isSuperAdmin =
|
||||
roleSelect.value === superAdminRole;
|
||||
|
||||
|
||||
document
|
||||
.querySelectorAll('.permission-checkbox')
|
||||
.forEach(function (checkbox) {
|
||||
|
||||
if (
|
||||
checkbox.dataset.permission ===
|
||||
manageAdminsPermission
|
||||
) {
|
||||
|
||||
if (!isSuperAdmin) {
|
||||
|
||||
checkbox.checked = false;
|
||||
checkbox.disabled = true;
|
||||
|
||||
} else {
|
||||
|
||||
checkbox.disabled = false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
roleSelect.addEventListener(
|
||||
'change',
|
||||
handleAdminPermissions
|
||||
);
|
||||
|
||||
|
||||
handleAdminPermissions();
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
@endpush
|
||||
|
||||
Reference in New Issue
Block a user