feat:complete create edit and index blade for admin permission

This commit is contained in:
2026-08-19 19:22:07 +03:30
parent 894ae6794d
commit ba7f45c147
4 changed files with 500 additions and 108 deletions
+1
View File
@@ -20,6 +20,7 @@ return Application::configure(basePath: dirname(__DIR__))
$middleware->alias([
'admin.permission' => AdminPermissionMiddleware::class,
]);
$middleware->redirectGuestsTo(function (Request $request) {
+73 -24
View File
@@ -109,63 +109,112 @@
@enderror
</div>
{{-- Permissions --}}
<div class="col-xl-12 mt-4">
<div class="card border shadow-sm">
{{-- Header --}}
<div class="card-header bg-light">
<div class="card-title mb-0 fw-semibold">
دسترسی‌های مدیر
</div>
</div>
{{-- Body --}}
<div class="card-body">
<div class="row gy-3">
@foreach($permissions as $permission)
<div class="col-xl-3 col-lg-4 col-md-6">
<div class="form-check border rounded p-3">
<input
class="form-check-input"
type="checkbox"
name="permissions[]"
value="{{ $permission->id }}"
id="permission_{{ $permission->id }}"
@checked(
in_array(
$permission->id,
old('permissions', [])
)
)
name="admin_view"
value="1"
id="admin_view"
@checked(old('admin_view'))
>
<label
class="form-check-label ms-2"
for="permission_{{ $permission->id }}"
for="admin_view"
>
{{ $permission->title }}
مشاهده مدیران
</label>
</div>
</div>
@endforeach
<div class="col-xl-3 col-lg-4 col-md-6">
<div class="form-check border rounded p-3">
<input
class="form-check-input"
type="checkbox"
name="admin_create"
value="1"
id="admin_create"
@checked(old('admin_create'))
>
<label
class="form-check-label ms-2"
for="admin_create"
>
ایجاد مدیر
</label>
</div>
@error('permissions')
<div class="text-danger mt-3">
{{ $message }}
</div>
@enderror
<div class="col-xl-3 col-lg-4 col-md-6">
<div class="form-check border rounded p-3">
<input
class="form-check-input"
type="checkbox"
name="admin_edit"
value="1"
id="admin_edit"
@checked(old('admin_edit'))
>
<label
class="form-check-label ms-2"
for="admin_edit"
>
ویرایش مدیر
</label>
</div>
</div>
<div class="col-xl-3 col-lg-4 col-md-6">
<div class="form-check border rounded p-3">
<input
class="form-check-input"
type="checkbox"
name="admin_delete"
value="1"
id="admin_delete"
@checked(old('admin_delete'))
>
<label
class="form-check-label ms-2"
for="admin_delete"
>
حذف مدیر
</label>
</div>
</div>
</div>
</div>
+209 -17
View File
@@ -6,8 +6,12 @@
<div>
<nav>
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item"><a href="{{route('admin.admins.index')}}">مدیران</a></li>
<li class="breadcrumb-item active" aria-current="page">ویرایش مدیر</li>
<li class="breadcrumb-item">
<a href="{{ route('admin.admins.index') }}">مدیران</a>
</li>
<li class="breadcrumb-item active" aria-current="page">
ویرایش مدیر
</li>
</ol>
</nav>
</div>
@@ -19,68 +23,94 @@
<div class="row">
<div class="col-xl-12">
<form action="{{ route('admin.admins.update',$admin) }}"
method="POST"
enctype="multipart/form-data">
<form action="{{ route('admin.admins.update', $admin) }}"
method="POST">
@csrf
@method('PUT')
<div class="card custom-card">
<div class="card-header">
<div class="card-title">ویرایش مدیر</div>
</div>
<div class="card-body">
{{-- اطلاعات مدیر --}}
<div class="row gy-3">
<div class="col-xl-6">
<label class="form-label">نام</label>
<input type="text" class="form-control" name="first_name"
value="{{ old('first_name' ,$admin->first_name) }}"
<input type="text"
class="form-control"
name="first_name"
value="{{ old('first_name', $admin->first_name) }}"
placeholder="نام را وارد کنید">
@error('first_name')
<div class="text-danger mt-1">{{ $message }}</div>
@enderror
</div>
<div class="col-xl-6">
<label class="form-label">نام خانوادگی</label>
<input type="text" class="form-control"
<input type="text"
class="form-control"
name="last_name"
value="{{ old('last_name',$admin->last_name) }}"
value="{{ old('last_name', $admin->last_name) }}"
placeholder="نام خانوادگی را وارد کنید">
@error('last_name')
<div class="text-danger mt-1">{{ $message }}</div>
@enderror
</div>
<div class="col-xl-6">
<label class="form-label">نام کاربری</label>
<input type="text" class="form-control"
<input type="text"
class="form-control"
name="username"
value="{{ old('username',$admin->username) }}"
value="{{ old('username', $admin->username) }}"
placeholder="نام کاربری">
@error('username')
<div class="text-danger mt-1">{{ $message }}</div>
@enderror
</div>
<div class="col-xl-6">
<label class="form-label">ایمیل</label>
<input type="email" class="form-control"
<input type="email"
class="form-control"
name="email"
value="{{ old('email',$admin->email) }}"
value="{{ old('email', $admin->email) }}"
placeholder="ایمیل را وارد کنید">
@error('email')
<div class="text-danger mt-1">{{ $message }}</div>
@enderror
</div>
<div class="col-xl-6">
<label class="form-label">رمز عبور (در صورت تغییر)</label>
<label class="form-label">
رمز عبور (در صورت تغییر)
</label>
<input type="password"
class="form-control"
name="password"
placeholder="رمز عبور را وارد کنید">
@error('password')
<div class="text-danger mt-1">{{ $message }}</div>
@enderror
@@ -92,12 +122,14 @@
<select class="form-control" name="status">
<option value="{{ \App\Enums\AdminStatus::ENABLE->value }}"
<option
value="{{ \App\Enums\AdminStatus::ENABLE->value }}"
{{ old('status', $admin->status) == \App\Enums\AdminStatus::ENABLE->value ? 'selected' : '' }}>
فعال
</option>
<option value="{{ \App\Enums\AdminStatus::DISABLE->value }}"
<option
value="{{ \App\Enums\AdminStatus::DISABLE->value }}"
{{ old('status', $admin->status) == \App\Enums\AdminStatus::DISABLE->value ? 'selected' : '' }}>
غیرفعال
</option>
@@ -108,15 +140,175 @@
<div class="text-danger mt-1">{{ $message }}</div>
@enderror
</div>
</div>
{{-- دسترسی‌های مدیر --}}
<div class="col-xl-12 mt-4">
<div class="card border shadow-sm">
<div class="card-header bg-light">
<div class="card-title mb-0 fw-semibold">
دسترسی‌های مدیر
</div>
</div>
<div class="card-body">
<div class="row gy-3">
{{-- مشاهده مدیران --}}
<div class="col-xl-3 col-lg-4 col-md-6">
<div class="form-check border rounded p-3">
<input
class="form-check-input"
type="checkbox"
name="admin_view"
value="1"
id="admin_view"
@checked(
old(
'admin_view',
$adminPermission?->admin_view
)
)
>
<label
class="form-check-label ms-2"
for="admin_view"
>
مشاهده مدیران
</label>
</div>
</div>
{{-- ایجاد مدیر --}}
<div class="col-xl-3 col-lg-4 col-md-6">
<div class="form-check border rounded p-3">
<input
class="form-check-input"
type="checkbox"
name="admin_create"
value="1"
id="admin_create"
@checked(
old(
'admin_create',
$adminPermission?->admin_create
)
)
>
<label
class="form-check-label ms-2"
for="admin_create"
>
ایجاد مدیر
</label>
</div>
</div>
{{-- ویرایش مدیر --}}
<div class="col-xl-3 col-lg-4 col-md-6">
<div class="form-check border rounded p-3">
<input
class="form-check-input"
type="checkbox"
name="admin_edit"
value="1"
id="admin_edit"
@checked(
old(
'admin_edit',
$adminPermission?->admin_edit
)
)
>
<label
class="form-check-label ms-2"
for="admin_edit"
>
ویرایش مدیر
</label>
</div>
</div>
{{-- حذف مدیر --}}
<div class="col-xl-3 col-lg-4 col-md-6">
<div class="form-check border rounded p-3">
<input
class="form-check-input"
type="checkbox"
name="admin_delete"
value="1"
id="admin_delete"
@checked(
old(
'admin_delete',
$adminPermission?->admin_delete
)
)
>
<label
class="form-check-label ms-2"
for="admin_delete"
>
حذف مدیر
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card-footer text-end">
<button type="submit" class="btn btn-primary">ذخیره تغییرات</button>
<button type="submit" class="btn btn-primary">
ذخیره تغییرات
</button>
</div>
</div>
</form>
</div>
</div>
+200 -50
View File
@@ -1,86 +1,164 @@
@extends('admin.layouts.app')
@section('breadcrumb')
<div>
<h1 class="page-title fw-medium fs-18 mb-2">لیست ادمین‌ها</h1>
<div>
<nav>
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item"><a href="{{ route('admin.admins.index') }}">ادمین‌ها</a></li>
<li class="breadcrumb-item active" aria-current="page">لیست ادمین‌ها</li>
<li class="breadcrumb-item">
<a href="{{ route('admin.admins.index') }}">
ادمین‌ها
</a>
</li>
<li class="breadcrumb-item active" aria-current="page">
لیست ادمین‌ها
</li>
</ol>
</nav>
</div>
</div>
@endsection
@section('content')
<div class="container-fluid pt-4">
<!-- Filter + Search -->
{{-- فیلتر و جستجو --}}
<div class="row">
<div class="col-xl-12">
<div class="card custom-card">
<div class="card-body p-3">
<form method="GET"
action="{{route('admin.admins.index')}}">
action="{{ route('admin.admins.index') }}">
<div class="d-flex align-items-center justify-content-between flex-wrap gap-3">
<!-- Left: Add Admin + Sort -->
{{-- جستجو و مرتب سازی --}}
<div class="d-flex flex-wrap gap-1 project-list-main align-items-center">
<div class="d-flex me-2">
<input class="form-control me-2" type="search" name="search"
<input
class="form-control me-2"
type="search"
name="search"
placeholder="جستجو ادمین"
value="{{ request('search') }}"
aria-label="جستجو">
<button class="btn btn-light" type="submit">جستجو</button>
aria-label="جستجو"
>
<button class="btn btn-light" type="submit">
جستجو
</button>
</div>
<select id="choices-single-default" class="form-control" name="sort">
<option value="">مرتب‌سازی بر اساس</option>
<select
id="choices-single-default"
class="form-control"
name="sort"
>
<option value="">
مرتب‌سازی بر اساس
</option>
<option
value="name_asc"
@selected(request('sort') == 'name_asc')>
@selected(request('sort') == 'name_asc')
>
نام (الف - ی)
</option>
<option
value="name_desc"
@selected(request('sort') == 'name_desc')>
@selected(request('sort') == 'name_desc')
>
نام (ی - الف)
</option>
<option value="email"
@selected(request('sort') == 'email')>
<option
value="email"
@selected(request('sort') == 'email')
>
ایمیل
</option>
<option value="newest"
@selected(request()->missing('sort') || request('sort') == 'newest')>
<option
value="newest"
@selected(
request()->missing('sort') ||
request('sort') == 'newest'
)
>
جدیدترین
</option>
</select>
</div>
<!-- Right: Search -->
{{-- ایجاد مدیر --}}
@if(auth('admin')->user()->permission?->admin_create)
<div class="d-flex" role="search">
<a href="{{route('admin.admins.create')}}"
class="btn btn-primary me-2">
<i class="ri-add-line me-1 fw-medium align-middle"></i>ایجاد مدیر
<a
href="{{ route('admin.admins.create') }}"
class="btn btn-primary me-2"
>
<i class="ri-add-line me-1 fw-medium align-middle"></i>
ایجاد مدیر
</a>
</div>
</div>
@endif
</div>
</form>
</div>
</div>
</div>
</div>
<!-- Table -->
<div class="row">
<div class="col-xl-12">
<div class="card custom-card">
<div class="table-responsive">
<table class="table text-nowrap table-bordered">
<thead>
<tr>
<th><input class="form-check-input check-all" type="checkbox" id="all-admins"></th>
<th>
<input
class="form-check-input check-all"
type="checkbox"
id="all-admins"
>
</th>
<th>نام</th>
<th>نام خانوادگی</th>
<th>نام کاربری</th>
@@ -88,67 +166,139 @@
<th>وضعیت</th>
<th>تاریخ ایجاد</th>
<th>اقدامات</th>
</tr>
</thead>
<tbody>
@foreach($admins as $admin)
<tr>
<td>
<input class="form-check-input"
<input
class="form-check-input"
type="checkbox"
value="{{ $admin->id }}">
value="{{ $admin->id }}"
>
</td>
<td>{{ $admin->first_name }}</td>
<td>{{ $admin->last_name }}</td>
<td>{{ $admin->username }}</td>
<td>{{ $admin->email }}</td>
<td>
{{ $admin->first_name }}
</td>
<td>
{{ $admin->last_name }}
</td>
<td>
{{ $admin->username }}
</td>
<td>
{{ $admin->email }}
</td>
<td>
@switch($admin->status)
@case(\App\Enums\AdminStatus::ENABLE)
<span class="badge bg-primary-transparent">فعال</span>
<span class="badge bg-primary-transparent">
فعال
</span>
@break
@case(\App\Enums\AdminStatus::DISABLE)
<span class="badge bg-danger-transparent">غیرفعال</span>
<span class="badge bg-danger-transparent">
غیرفعال
</span>
@break
@endswitch
</td>
<td>{{ $admin->created_at->toJalali()->format('H:i Y/m/d') }}</td>
<td>
{{ $admin->created_at->toJalali()->format('H:i Y/m/d') }}
</td>
<td>
<div class="hstack gap-2 fs-15">
<a href="{{ route('admin.admins.edit', $admin) }}"
class="btn btn-secondary-light btn-icon btn-sm" title="ویرایش">
@if(auth('admin')->user()->permission?->admin_edit)
<a
href="{{ route('admin.admins.edit', $admin) }}"
class="btn btn-secondary-light btn-icon btn-sm"
title="ویرایش"
>
<i class="ti ti-pencil"></i>
</a>
<form action="{{ route('admin.admins.destroy', $admin) }}"
@endif
@if(auth('admin')->user()->permission?->admin_delete)
<form
action="{{ route('admin.admins.destroy', $admin) }}"
method="POST"
onsubmit="return confirm('آیا از حذف این ادمین مطمئن هستید؟')">
onsubmit="return confirm('آیا از حذف این ادمین مطمئن هستید؟')"
>
@csrf
@method('DELETE')
<button type="submit" class="btn btn-icon btn-sm btn-danger-light">
<button
type="submit"
class="btn btn-icon btn-sm btn-danger-light"
title="حذف"
>
<i class="ri-delete-bin-line"></i>
</button>
</form>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
@endif
</div>
<!-- Pagination -->
<div class="d-flex justify-content-end mt-3">
{{ $admins->links() }}
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="d-flex justify-content-end mt-3">
{{ $admins->links() }}
</div>
</div>
@endsection