feat:implement admin permissions for admin side
This commit is contained in:
@@ -1,12 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Http\Controllers\Admin;
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests\Admin\AdminStoreRequest;
|
use App\Http\Requests\Admin\AdminStoreRequest;
|
||||||
use App\Http\Requests\Admin\AdminUpdateRequest;
|
use App\Http\Requests\Admin\AdminUpdateRequest;
|
||||||
use App\Models\Admin;
|
use App\Models\Admin;
|
||||||
use App\Models\Permission;
|
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -61,10 +59,7 @@ class AdminController extends Controller
|
|||||||
|
|
||||||
public function create()
|
public function create()
|
||||||
{
|
{
|
||||||
$permissions = Permission::query()
|
return view('admin.admins.create');
|
||||||
->orderBy('id')
|
|
||||||
->get();
|
|
||||||
return view('admin.admins.create', compact('permissions'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function store(AdminStoreRequest $request)
|
public function store(AdminStoreRequest $request)
|
||||||
@@ -72,11 +67,20 @@ class AdminController extends Controller
|
|||||||
$inputs = $request->validated();
|
$inputs = $request->validated();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
$inputs['password'] = Hash::make($inputs['password']);
|
$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();
|
DB::commit();
|
||||||
|
|
||||||
@@ -95,31 +99,51 @@ class AdminController extends Controller
|
|||||||
|
|
||||||
return redirect()
|
return redirect()
|
||||||
->route('admin.admins.index')
|
->route('admin.admins.index')
|
||||||
->withErrors([
|
->with('success', 'مدیر با موفقیت ایجاد شد.');
|
||||||
'success' => 'عملیات با موفقیت انجام شد'
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function edit(Admin $admin)
|
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)
|
public function update(AdminUpdateRequest $request, Admin $admin)
|
||||||
{
|
{
|
||||||
$inputs = $request->validated();
|
$inputs = $request->validated();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
if (!empty($inputs['password'])) {
|
if (!empty($inputs['password'])) {
|
||||||
|
|
||||||
$inputs['password'] = Hash::make($inputs['password']);
|
$inputs['password'] = Hash::make($inputs['password']);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
unset($inputs['password']);
|
unset($inputs['password']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$admin->update($inputs);
|
$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();
|
DB::commit();
|
||||||
|
|
||||||
} catch (\Exception $exception) {
|
} catch (\Exception $exception) {
|
||||||
@@ -137,21 +161,38 @@ class AdminController extends Controller
|
|||||||
|
|
||||||
return redirect()
|
return redirect()
|
||||||
->route('admin.admins.index')
|
->route('admin.admins.index')
|
||||||
->withErrors([
|
->with('success', 'عملیات با موفقیت انجام شد.');
|
||||||
'success' => 'عملیات با موفقیت انجام شد'
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroy(Admin $admin)
|
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()
|
return redirect()
|
||||||
->route('admin.admins.index')
|
->route('admin.admins.index')
|
||||||
->withErrors([
|
->with('success', 'مدیر با موفقیت حذف شد.');
|
||||||
'success' => 'عملیات با موفقیت انجام شد'
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -56,13 +56,8 @@ class Admin extends Authenticatable
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function permissions()
|
public function permission()
|
||||||
{
|
{
|
||||||
return $this->belongsToMany(
|
return $this->hasOne(AdminPermission::class);
|
||||||
Permission::class,
|
|
||||||
'admin_permission',
|
|
||||||
'admin_id',
|
|
||||||
'permission_id'
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+37
-6
@@ -3,6 +3,7 @@
|
|||||||
use App\Http\Controllers\Admin\AdminController;
|
use App\Http\Controllers\Admin\AdminController;
|
||||||
use App\Http\Controllers\Admin\AuthController;
|
use App\Http\Controllers\Admin\AuthController;
|
||||||
use App\Http\Controllers\Admin\DashboardController;
|
use App\Http\Controllers\Admin\DashboardController;
|
||||||
|
use App\Http\Controllers\FlightController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::prefix('admin')->name('admin.')->group(function () {
|
Route::prefix('admin')->name('admin.')->group(function () {
|
||||||
@@ -44,24 +45,54 @@ Route::prefix('admin')->name('admin.')->group(function () {
|
|||||||
|
|
||||||
Route::get('/', 'index')
|
Route::get('/', 'index')
|
||||||
->name('index')
|
->name('index')
|
||||||
->middleware('admin.permission:admins.index');
|
->middleware('admin.permission:admin_view');
|
||||||
|
|
||||||
Route::get('create', 'create')
|
Route::get('create', 'create')
|
||||||
->name('create')
|
->name('create')
|
||||||
->middleware('admin.permission:admins.create');
|
->middleware('admin.permission:admin_create');
|
||||||
|
|
||||||
Route::post('store', 'store')
|
Route::post('store', 'store')
|
||||||
->name('store')
|
->name('store')
|
||||||
->middleware('admin.permission:admins.create');
|
->middleware('admin.permission:admin_create');
|
||||||
|
|
||||||
Route::prefix('{admin}')->group(function () {
|
Route::prefix('{admin}')->group(function () {
|
||||||
|
|
||||||
Route::get('edit', 'edit')
|
Route::get('edit', 'edit')
|
||||||
->name('edit')
|
->name('edit')
|
||||||
->middleware('admin.permission:admins.edit');
|
->middleware('admin.permission:admin_edit');
|
||||||
|
|
||||||
Route::put('update', 'update')
|
Route::put('update', 'update')
|
||||||
->name('update')
|
->name('update')
|
||||||
->middleware('admin.permission:admins.edit');
|
->middleware('admin.permission:admin_edit');
|
||||||
|
|
||||||
Route::delete('destroy', 'destroy')
|
Route::delete('destroy', 'destroy')
|
||||||
->name('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');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user