From 29ddbe2e0fc6e8291e0f7319cbddccf383f574ad Mon Sep 17 00:00:00 2001 From: Bahar Date: Wed, 19 Aug 2026 19:20:10 +0330 Subject: [PATCH] feat:implement admin permissions for admin side --- .../Controllers/Admin/AdminController.php | 79 ++++++++++++++----- app/Models/Admin.php | 9 +-- routes/admin.php | 43 ++++++++-- 3 files changed, 99 insertions(+), 32 deletions(-) diff --git a/app/Http/Controllers/Admin/AdminController.php b/app/Http/Controllers/Admin/AdminController.php index 688707c..a36a53c 100644 --- a/app/Http/Controllers/Admin/AdminController.php +++ b/app/Http/Controllers/Admin/AdminController.php @@ -1,12 +1,10 @@ orderBy('id') - ->get(); - return view('admin.admins.create', compact('permissions')); + return view('admin.admins.create'); } public function store(AdminStoreRequest $request) @@ -72,11 +67,20 @@ class AdminController extends Controller $inputs = $request->validated(); try { + DB::beginTransaction(); $inputs['password'] = Hash::make($inputs['password']); - Admin::create($inputs); + $admin = Admin::create($inputs); + + + $admin->permission()->create([ + 'admin_view' => $request->boolean('admin_view'), + 'admin_create' => $request->boolean('admin_create'), + 'admin_edit' => $request->boolean('admin_edit'), + 'admin_delete' => $request->boolean('admin_delete'), + ]); DB::commit(); @@ -95,31 +99,51 @@ class AdminController extends Controller return redirect() ->route('admin.admins.index') - ->withErrors([ - 'success' => 'عملیات با موفقیت انجام شد' - ]); + ->with('success', 'مدیر با موفقیت ایجاد شد.'); } public function edit(Admin $admin) { - return view('admin.admins.edit', compact('admin')); + $adminPermission = $admin->permission; + + return view('admin.admins.edit', compact( + 'admin', + 'adminPermission' + )); } + public function update(AdminUpdateRequest $request, Admin $admin) { $inputs = $request->validated(); try { + DB::beginTransaction(); if (!empty($inputs['password'])) { + $inputs['password'] = Hash::make($inputs['password']); + } else { + unset($inputs['password']); } $admin->update($inputs); + $admin->permission()->updateOrCreate( + [ + 'admin_id' => $admin->id, + ], + [ + 'admin_view' => $request->boolean('admin_view'), + 'admin_create' => $request->boolean('admin_create'), + 'admin_edit' => $request->boolean('admin_edit'), + 'admin_delete' => $request->boolean('admin_delete'), + ] + ); + DB::commit(); } catch (\Exception $exception) { @@ -137,21 +161,38 @@ class AdminController extends Controller return redirect() ->route('admin.admins.index') - ->withErrors([ - 'success' => 'عملیات با موفقیت انجام شد' - ]); + ->with('success', 'عملیات با موفقیت انجام شد.'); } public function destroy(Admin $admin) { - $admin->delete(); + try { + + DB::beginTransaction(); + + $admin->permission()->delete(); + + $admin->delete(); + + DB::commit(); + + } catch (\Exception $exception) { + + DB::rollBack(); + + Log::error($exception); + + return back() + ->withErrors([ + 'general' => 'خطایی در حذف مدیر رخ داده است.' + ]); + } return redirect() ->route('admin.admins.index') - ->withErrors([ - 'success' => 'عملیات با موفقیت انجام شد' - ]); + ->with('success', 'مدیر با موفقیت حذف شد.'); } - } + + diff --git a/app/Models/Admin.php b/app/Models/Admin.php index b39ec3c..41efaba 100644 --- a/app/Models/Admin.php +++ b/app/Models/Admin.php @@ -56,13 +56,8 @@ class Admin extends Authenticatable } - public function permissions() + public function permission() { - return $this->belongsToMany( - Permission::class, - 'admin_permission', - 'admin_id', - 'permission_id' - ); + return $this->hasOne(AdminPermission::class); } } diff --git a/routes/admin.php b/routes/admin.php index 668e9e5..18febda 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -3,6 +3,7 @@ use App\Http\Controllers\Admin\AdminController; use App\Http\Controllers\Admin\AuthController; use App\Http\Controllers\Admin\DashboardController; +use App\Http\Controllers\FlightController; use Illuminate\Support\Facades\Route; Route::prefix('admin')->name('admin.')->group(function () { @@ -44,24 +45,54 @@ Route::prefix('admin')->name('admin.')->group(function () { Route::get('/', 'index') ->name('index') - ->middleware('admin.permission:admins.index'); + ->middleware('admin.permission:admin_view'); + Route::get('create', 'create') ->name('create') - ->middleware('admin.permission:admins.create'); + ->middleware('admin.permission:admin_create'); Route::post('store', 'store') ->name('store') - ->middleware('admin.permission:admins.create'); + ->middleware('admin.permission:admin_create'); + Route::prefix('{admin}')->group(function () { + Route::get('edit', 'edit') ->name('edit') - ->middleware('admin.permission:admins.edit'); + ->middleware('admin.permission:admin_edit'); + Route::put('update', 'update') ->name('update') - ->middleware('admin.permission:admins.edit'); + ->middleware('admin.permission:admin_edit'); + Route::delete('destroy', 'destroy') ->name('destroy') - ->middleware('admin.permission:admins.delete'); + ->middleware('admin.permission:admin_delete'); + + }); + }); + Route::prefix('users') + ->name('users.') + ->controller(UserController::class) + ->group(function () { + + Route::get('/', 'index') + ->name('index') + ->middleware('admin.permission:user_view'); + + Route::prefix('{user}')->group(function () { + + Route::get('edit', 'edit') + ->name('edit') + ->middleware('admin.permission:user_edit'); + + Route::put('update', 'update') + ->name('update') + ->middleware('admin.permission:user_edit'); + + Route::delete('destroy', 'destroy') + ->name('destroy') + ->middleware('admin.permission:user_delete'); });