feat: implement admin management

This commit is contained in:
2026-08-20 07:56:06 +03:30
parent 9d5e325c3f
commit b31dd1b8fb
15 changed files with 838 additions and 326 deletions
+65 -36
View File
@@ -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