fix: complete admins permission
This commit is contained in:
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
|
||||||
|
class AdminPermissionMiddleware
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle an incoming request.
|
||||||
|
*
|
||||||
|
* @param Closure(Request): (Response) $next
|
||||||
|
*/
|
||||||
|
public function handle(Request $request, Closure $next , string $permission): Response
|
||||||
|
{
|
||||||
|
$admin = auth('admin')->user();
|
||||||
|
|
||||||
|
$adminPermission = $admin->permission;
|
||||||
|
|
||||||
|
if (!$adminPermission || !$adminPermission->{$permission}) {
|
||||||
|
abort(403, 'شما اجازه دسترسی به این بخش را ندارید.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,4 +26,9 @@ class Admin extends Authenticatable
|
|||||||
'status' => AdminStatus::class,
|
'status' => AdminStatus::class,
|
||||||
'last_login_at' => 'datetime',
|
'last_login_at' => 'datetime',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function permission()
|
||||||
|
{
|
||||||
|
return $this->hasOne(AdminPermission::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,89 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Reliese Model.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class AdminPermission
|
||||||
|
*
|
||||||
|
* @property int $id
|
||||||
|
* @property int $admin_id
|
||||||
|
* @property bool $flight_create
|
||||||
|
* @property bool $flight_edit
|
||||||
|
* @property bool $flight_delete
|
||||||
|
* @property bool $tour_create
|
||||||
|
* @property bool $tour_edit
|
||||||
|
* @property bool $tour_delete
|
||||||
|
* @property bool $booking_view
|
||||||
|
* @property bool $booking_edit
|
||||||
|
* @property bool $booking_delete
|
||||||
|
* @property bool $user_view
|
||||||
|
* @property bool $user_edit
|
||||||
|
* @property bool $user_delete
|
||||||
|
* @property Carbon|null $created_at
|
||||||
|
* @property Carbon|null $updated_at
|
||||||
|
* @property bool $admin_view
|
||||||
|
* @property bool $admin_create
|
||||||
|
* @property bool $admin_edit
|
||||||
|
* @property bool $admin_delete
|
||||||
|
*
|
||||||
|
* @property Admin $admin
|
||||||
|
*
|
||||||
|
* @package App\Models
|
||||||
|
*/
|
||||||
|
class AdminPermission extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'admin_permissions';
|
||||||
|
public static $snakeAttributes = false;
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'admin_id' => 'int',
|
||||||
|
'flight_create' => 'bool',
|
||||||
|
'flight_edit' => 'bool',
|
||||||
|
'flight_delete' => 'bool',
|
||||||
|
'tour_create' => 'bool',
|
||||||
|
'tour_edit' => 'bool',
|
||||||
|
'tour_delete' => 'bool',
|
||||||
|
'booking_view' => 'bool',
|
||||||
|
'booking_edit' => 'bool',
|
||||||
|
'booking_delete' => 'bool',
|
||||||
|
'user_view' => 'bool',
|
||||||
|
'user_edit' => 'bool',
|
||||||
|
'user_delete' => 'bool',
|
||||||
|
'admin_view' => 'bool',
|
||||||
|
'admin_create' => 'bool',
|
||||||
|
'admin_edit' => 'bool',
|
||||||
|
'admin_delete' => 'bool'
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'admin_id',
|
||||||
|
'flight_create',
|
||||||
|
'flight_edit',
|
||||||
|
'flight_delete',
|
||||||
|
'tour_create',
|
||||||
|
'tour_edit',
|
||||||
|
'tour_delete',
|
||||||
|
'booking_view',
|
||||||
|
'booking_edit',
|
||||||
|
'booking_delete',
|
||||||
|
'user_view',
|
||||||
|
'user_edit',
|
||||||
|
'user_delete',
|
||||||
|
'admin_view',
|
||||||
|
'admin_create',
|
||||||
|
'admin_edit',
|
||||||
|
'admin_delete'
|
||||||
|
];
|
||||||
|
|
||||||
|
public function admin()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Admin::class);
|
||||||
|
}
|
||||||
|
}
|
||||||
+19
-4
@@ -4,6 +4,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\Admin\UserController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::prefix('admin')->name('admin.')->group(function () {
|
Route::prefix('admin')->name('admin.')->group(function () {
|
||||||
@@ -31,13 +32,28 @@ Route::prefix('admin')->name('admin.')->group(function () {
|
|||||||
|
|
||||||
Route::prefix('admins')->name('admins.')->controller(AdminController::class)->group(function () {
|
Route::prefix('admins')->name('admins.')->controller(AdminController::class)->group(function () {
|
||||||
|
|
||||||
Route::get('/', 'index')->name('index');
|
Route::get('/', 'index')->name('index')->middleware('admin.permission:admin_view');
|
||||||
|
|
||||||
Route::get('create', 'create')->name('create');
|
Route::get('create', 'create')->name('create')->middleware('admin.permission:admin_create');
|
||||||
Route::post('store', 'store')->name('store');
|
|
||||||
|
Route::post('store', 'store')->name('store')->middleware('admin.permission:admin_create');
|
||||||
|
|
||||||
Route::prefix('{admin}')->group(function () {
|
Route::prefix('{admin}')->group(function () {
|
||||||
|
|
||||||
|
Route::get('edit', 'edit')->name('edit')->middleware('admin.permission:admin_edit');
|
||||||
|
|
||||||
|
Route::put('update', 'update')->name('update')->middleware('admin.permission:admin_edit');
|
||||||
|
|
||||||
|
Route::delete('destroy', 'destroy')->name('destroy')->middleware('admin.permission:admin_delete');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
Route::prefix('users')->name('users.')->controller(UserController::class)->group(function () {
|
||||||
|
|
||||||
|
Route::get('/', 'index')->name('index');
|
||||||
|
|
||||||
|
Route::prefix('{user}')->group(function () {
|
||||||
|
|
||||||
Route::get('edit', 'edit')->name('edit');
|
Route::get('edit', 'edit')->name('edit');
|
||||||
Route::put('update', 'update')->name('update');
|
Route::put('update', 'update')->name('update');
|
||||||
|
|
||||||
@@ -46,5 +62,4 @@ Route::prefix('admin')->name('admin.')->group(function () {
|
|||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user