feat:implement admin permissions for admin side

This commit is contained in:
2026-08-19 19:20:10 +03:30
parent 4b453fdcff
commit 29ddbe2e0f
3 changed files with 99 additions and 32 deletions
+60 -19
View File
@@ -1,12 +1,10 @@
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\AdminStoreRequest;
use App\Http\Requests\Admin\AdminUpdateRequest;
use App\Models\Admin;
use App\Models\Permission;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
@@ -61,10 +59,7 @@ class AdminController extends Controller
public function create()
{
$permissions = Permission::query()
->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', 'مدیر با موفقیت حذف شد.');
}
}
+2 -7
View File
@@ -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);
}
}
+37 -6
View File
@@ -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');
});