diff --git a/app/Modules/Admin/Http/Middleware/AdminPolicyAuthorization.php b/app/Modules/Admin/Http/Middleware/AdminPolicyAuthorization.php new file mode 100644 index 0000000..1c8458a --- /dev/null +++ b/app/Modules/Admin/Http/Middleware/AdminPolicyAuthorization.php @@ -0,0 +1,25 @@ +can('viewAdminPath', User::class)) + { + abort(403, 'Unauthorized action.'); + } + + return $next($request); + } +} \ No newline at end of file diff --git a/app/Modules/Admin/Http/Middleware/GloabalAdminPathsPolicyAuthorization.php b/app/Modules/Admin/Http/Middleware/GloabalAdminPathsPolicyAuthorization.php new file mode 100644 index 0000000..06341b6 --- /dev/null +++ b/app/Modules/Admin/Http/Middleware/GloabalAdminPathsPolicyAuthorization.php @@ -0,0 +1,25 @@ +can('editGlobalTables', User::class)) + { + abort(403, 'Unauthorized action.'); + } + + return $next($request); + } +} \ No newline at end of file diff --git a/app/Modules/Admin/Http/Policies/AdminPathPolicy.php b/app/Modules/Admin/Http/Policies/AdminPathPolicy.php new file mode 100644 index 0000000..351a48a --- /dev/null +++ b/app/Modules/Admin/Http/Policies/AdminPathPolicy.php @@ -0,0 +1,33 @@ +id)->where('role_id', Role::SUPER_ADMIN)->count() == 1 + || UserRole::where('user_id', $user->id)->where('role_id', Role::CITY_MANAGER)->count() == 1 + ) + { + return true; + } + return false; + } + + public function editGlobalTables(User $user): bool + { + if ( + UserRole::where('user_id', $user->id)->where('role_id', Role::SUPER_ADMIN)->count() == 1 + ) + { + return true; + } + return false; + } +} diff --git a/app/Modules/Admin/Providers/AuthServiceProvider.php b/app/Modules/Admin/Providers/AuthServiceProvider.php new file mode 100644 index 0000000..b23a83c --- /dev/null +++ b/app/Modules/Admin/Providers/AuthServiceProvider.php @@ -0,0 +1,19 @@ + \Modules\Admin\Http\Policies\AdminPathPolicy::class + ]; + public function boot() + { + $this->registerPolicies(); + } +} \ No newline at end of file diff --git a/app/Modules/Admin/Providers/ModuleServiceProvider.php b/app/Modules/Admin/Providers/ModuleServiceProvider.php index e803811..04d5cee 100644 --- a/app/Modules/Admin/Providers/ModuleServiceProvider.php +++ b/app/Modules/Admin/Providers/ModuleServiceProvider.php @@ -5,13 +5,18 @@ use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Blade; use Livewire\Livewire; +use Illuminate\Support\Facades\Gate; class ModuleServiceProvider extends ServiceProvider { protected string $moduleName = 'Admin'; + protected $policies = [ + \Modules\User\Models\User::class => \Modules\Admin\Http\Policies\AdminPathPolicy::class + ]; public function register() { + $this->app->register(AuthServiceProvider::class); $this->app->register(RouteServiceProvider::class); } @@ -23,6 +28,7 @@ public function boot() $this->registerConfig(); $this->registerComponent(); $this->registerLivewire(); + //$this->registerPolicies(); } protected function registerViews() @@ -71,4 +77,14 @@ protected function registerComponent() { //Blade::component('', \Modules\\Http\Components\::class); } + + protected function registerPolicies1() + { + + Gate::policy(\Modules\User\Models\User::class, \Modules\Admin\Http\Policies\AdminPathPolicy::class); + /*Gate::define('viewAdminPath', function ($user) + { + return Gate::authorize('viewAdminPath', \Modules\Admin\Http\Policies\AdminPathPolicy::class); + });*/ + } } \ No newline at end of file diff --git a/app/Modules/Admin/Routes/web.php b/app/Modules/Admin/Routes/web.php index 2813489..a46ffce 100644 --- a/app/Modules/Admin/Routes/web.php +++ b/app/Modules/Admin/Routes/web.php @@ -2,49 +2,42 @@ use Illuminate\Support\Facades\Route; use Modules\Admin\Http\Controllers\AdminController; +use Modules\Admin\Http\Middleware\AdminPolicyAuthorization; +use Modules\Admin\Http\Middleware\GloabalAdminPathsPolicyAuthorization; -Route::middleware(['auth'])->group(function () +Route::middleware(['auth', AdminPolicyAuthorization::class])->group(function () { - - Route::get('/admin', [AdminController::class, 'index']); - - Route::middleware(['hasAccess'])->group(function () + Route::middleware(['auth', AdminPolicyAuthorization::class])->group(function () { - /** Routes that need to be protected - Маршруты которые нужно защитить */ + Route::post('/admin/cities/{city}/update', [Modules\Admin\Http\Controllers\AdminCitiesController::class, 'update'])->name('admin.cities.update'); + Route::post('/admin/cities/create', [Modules\Admin\Http\Controllers\AdminCitiesController::class, 'create'])->name('admin.cities.create'); + Route::post('/admin/cities/{city}/delete', [Modules\Admin\Http\Controllers\AdminCitiesController::class, 'delete'])->name('admin.cities.delete'); + Route::post('/admin/cities/{city}/restore', [Modules\Admin\Http\Controllers\AdminCitiesController::class, 'restore'])->withTrashed()->name('admin.cities.restore'); + Route::get('/admin/complexes/{complex}/edit', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'edit'])->name('admin.complexes.edit'); + Route::post('/admin/complexes/create', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'create'])->name('admin.complexes.create'); + Route::post('/admin/complexes/{complex}/delete', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'delete'])->name('admin.complexes.delete'); + Route::post('/admin/complexes/{complex}/update', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'update'])->withTrashed()->name('admin.complexes.update'); + Route::post('/admin/complexes/{complex}/restore', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'restore'])->withTrashed()->name('admin.complexes.restore'); + Route::get('/admin/bitrix/webhooks', [Modules\Admin\Http\Controllers\AdminBitrixWebhooksController::class, 'index'])->name('admin.bitrix.webhooks'); + Route::post('/admin/bitrix/webhooks', [Modules\Admin\Http\Controllers\AdminBitrixWebhooksController::class, 'create'])->name('admin.bitrix.webhooks.create'); }); - Route::post('/admin/set', [Modules\Admin\Http\Controllers\AdminController::class, 'setSuperAdmin'])->name('admin.setSuperAdmin'); - Route::get('/admin', [Modules\Admin\Http\Controllers\AdminController::class, 'index'])->name('admin.index'); - + Route::post('/admin/set', [Modules\Admin\Http\Controllers\AdminController::class, 'setSuperAdmin'])->name('admin.setSuperAdmin'); Route::get('/admin/users', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'index'])->name('admin.users'); Route::get('/admin/users/{user}/edit', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'edit'])->name('admin.users.edit'); Route::post('/admin/users/{user}/update', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'update'])->name('admin.users.update'); Route::post('/admin/user-role/{userRole}/delete', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'deleteUserRole'])->name('admin.users.role.delete'); - Route::get('/admin/companies', [Modules\Admin\Http\Controllers\AdminCompaniesController::class, 'index'])->name('admin.companies'); Route::get('/admin/companies/{company}/edit', [Modules\Admin\Http\Controllers\AdminCompaniesController::class, 'edit'])->name('admin.companies.edit'); Route::post('/admin/companies/{company}/update', [Modules\Admin\Http\Controllers\AdminCompaniesController::class, 'update'])->name('admin.companies.update'); Route::post('/admin/companies/{company}/delete', [Modules\Admin\Http\Controllers\AdminUsersController::class, 'update'])->name('admin.companies.delete'); - Route::get('/admin/cities', [Modules\Admin\Http\Controllers\AdminCitiesController::class, 'index'])->name('admin.cities'); - Route::post('/admin/cities/{city}/update', [Modules\Admin\Http\Controllers\AdminCitiesController::class, 'update'])->name('admin.cities.update'); - Route::post('/admin/cities/create', [Modules\Admin\Http\Controllers\AdminCitiesController::class, 'create'])->name('admin.cities.create'); - Route::post('/admin/cities/{city}/delete', [Modules\Admin\Http\Controllers\AdminCitiesController::class, 'delete'])->name('admin.cities.delete'); - Route::post('/admin/cities/{city}/restore', [Modules\Admin\Http\Controllers\AdminCitiesController::class, 'restore'])->withTrashed()->name('admin.cities.restore'); + Route::get('/admin/cities/managers', [Modules\Admin\Http\Controllers\AdminCityManagersController::class, 'index'])->name('admin.cities.managers'); Route::post('/admin/cities/managers/create', [Modules\Admin\Http\Controllers\AdminCityManagersController::class, 'create'])->name('admin.cities.managers.create'); Route::post('/admin/cities/managers/{manager}/delete', [Modules\Admin\Http\Controllers\AdminCityManagersController::class, 'delete'])->name('admin.cities.managers.delete'); - - - Route::get('/admin/complexes', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'index'])->name('admin.complexes'); - Route::get('/admin/complexes/{complex}/edit', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'edit'])->name('admin.complexes.edit'); - Route::post('/admin/complexes/create', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'create'])->name('admin.complexes.create'); - Route::post('/admin/complexes/{complex}/delete', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'delete'])->name('admin.complexes.delete'); - Route::post('/admin/complexes/{complex}/update', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'update'])->withTrashed()->name('admin.complexes.update'); - Route::post('/admin/complexes/{complex}/restore', [Modules\Admin\Http\Controllers\AdminComplexesController::class, 'restore'])->withTrashed()->name('admin.complexes.restore'); - Route::get('/admin/payments', [Modules\Admin\Http\Controllers\AdminPaymentsController::class, 'index'])->name('admin.payments'); Route::get('/admin/posts', [Modules\Admin\Http\Controllers\AdminPostsController::class, 'index'])->name('admin.posts'); @@ -66,8 +59,6 @@ Route::post('/admin/bitrix/agents/{agent}/set', [Modules\Admin\Http\Controllers\AdminBitrixController::class, 'setAgentId'])->name('admin.bitrix.agent.set'); Route::get('/admin/bitrix/agents/{agent}/deals/sync', [Modules\Admin\Http\Controllers\AdminBitrixController::class, 'syncDeals'])->name('admin.bitrix.agent.deals.sync'); - Route::get('/admin/bitrix/webhooks', [Modules\Admin\Http\Controllers\AdminBitrixWebhooksController::class, 'index'])->name('admin.bitrix.webhooks'); - Route::post('/admin/bitrix/webhooks', [Modules\Admin\Http\Controllers\AdminBitrixWebhooksController::class, 'create'])->name('admin.bitrix.webhooks.create'); }); \ No newline at end of file