From f28f58b74290c71ab15efc65877183dffc81e98c Mon Sep 17 00:00:00 2001 From: Thekindbull Date: Sat, 22 Nov 2025 21:12:31 +0800 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D0=B0=20=D1=80=D0=B5=D0=B3=D0=B8=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=B4=D0=B6=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Kernel.php | 22 ++--- .../Http/Controllers/AdminPostsController.php | 21 ++++- app/Modules/Admin/Views/menu/index.blade.php | 93 +++++++++---------- .../Admin/Views/posts/create.blade.php | 1 + app/Modules/Admin/Views/posts/list.blade.php | 1 + app/Modules/Bitrix/Models/BitrixId.php | 1 + ...11_13_000001_create_city_appends_table.php | 31 +++++++ .../Helpers/helper.php | 40 +++++++- app/Modules/Main/Models/CityAppend.php | 22 +++++ .../Main/Providers/ModuleServiceProvider.php | 12 ++- app/Modules/Main/Traits/CityAppendTrait.php | 23 +++++ app/Modules/Post/Models/Post.php | 8 +- app/Modules/User/Models/User.php | 25 +++++ .../User/Providers/AuthServiceProvider.php | 36 +++++++ .../User/Providers/ModuleServiceProvider.php | 1 + 15 files changed, 268 insertions(+), 69 deletions(-) create mode 100644 app/Modules/Main/Database/Migrations/2025_11_13_000001_create_city_appends_table.php rename app/Modules/{ClientCreateForm => Main}/Helpers/helper.php (58%) create mode 100644 app/Modules/Main/Models/CityAppend.php create mode 100644 app/Modules/Main/Traits/CityAppendTrait.php create mode 100644 app/Modules/User/Providers/AuthServiceProvider.php diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 494c050..6b26049 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -40,7 +40,7 @@ class Kernel extends HttpKernel 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, - \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', + \Illuminate\Routing\Middleware\ThrottleRequests::class . ':api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; @@ -53,16 +53,16 @@ class Kernel extends HttpKernel * @var array */ protected $middlewareAliases = [ - 'auth' => \App\Http\Middleware\Authenticate::class, - 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, - 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, - 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, - 'can' => \Illuminate\Auth\Middleware\Authorize::class, - 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, - 'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class, - 'signed' => \App\Http\Middleware\ValidateSignature::class, - 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class, + 'signed' => \App\Http\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, ]; } diff --git a/app/Modules/Admin/Http/Controllers/AdminPostsController.php b/app/Modules/Admin/Http/Controllers/AdminPostsController.php index bdb1504..7435984 100644 --- a/app/Modules/Admin/Http/Controllers/AdminPostsController.php +++ b/app/Modules/Admin/Http/Controllers/AdminPostsController.php @@ -2,18 +2,24 @@ namespace Modules\Admin\Http\Controllers; +use Illuminate\Http\Request; +use Modules\Main\Models\City; use Modules\Post\Models\Post; -use Modules\Post\Models\PostCategory; use App\Http\Controllers\Controller; -use Illuminate\Http\Request; +use Modules\Post\Models\PostCategory; use Illuminate\Support\Facades\Storage; class AdminPostsController extends Controller { public function index() { - $posts = Post::orderBy('id', 'desc')->get(); + $posts = Post::orderBy('id', 'desc'); + if (!auth()->user()->isAdmin() && auth()->user()->isCityManager()) + { + + } + $posts = $posts->get(); return view('admin::posts.index', [ 'posts' => $posts ]); @@ -40,6 +46,15 @@ public function store(Request $request) $post = Post::create( $request->only(['name', 'short_text', 'text', 'category', 'image']) ); + if (array_key_exists('cities', $request->all()) && is_array($request['cities'])) + { + foreach ($request->cities as $cityId) + { + $post->cities()->create([ + 'city_id' => $cityId, + ]); + } + } return to_route('admin.posts'); } diff --git a/app/Modules/Admin/Views/menu/index.blade.php b/app/Modules/Admin/Views/menu/index.blade.php index cd3a70d..7cae792 100644 --- a/app/Modules/Admin/Views/menu/index.blade.php +++ b/app/Modules/Admin/Views/menu/index.blade.php @@ -1,53 +1,44 @@
- @if (in_array($roles::SUPER_ADMIN, $userRoles)) - - @endif + +
diff --git a/app/Modules/Admin/Views/posts/create.blade.php b/app/Modules/Admin/Views/posts/create.blade.php index 347b361..86c1d4a 100644 --- a/app/Modules/Admin/Views/posts/create.blade.php +++ b/app/Modules/Admin/Views/posts/create.blade.php @@ -49,6 +49,7 @@
{{ $message }}
@enderror + @endsection diff --git a/app/Modules/Admin/Views/posts/list.blade.php b/app/Modules/Admin/Views/posts/list.blade.php index 74bff39..2a08992 100644 --- a/app/Modules/Admin/Views/posts/list.blade.php +++ b/app/Modules/Admin/Views/posts/list.blade.php @@ -17,6 +17,7 @@ {{ $post->name }} +
{{ $post->city }} {{ $post->created_at->diffForHumans() }} diff --git a/app/Modules/Bitrix/Models/BitrixId.php b/app/Modules/Bitrix/Models/BitrixId.php index 8e2d977..989ca2b 100644 --- a/app/Modules/Bitrix/Models/BitrixId.php +++ b/app/Modules/Bitrix/Models/BitrixId.php @@ -81,6 +81,7 @@ protected static function booted() } throw new \Exception('Error of bitrix identifier getter for ' . $bitrixId->bitrixable_type . ' with id ' . $bitrixId->bitrixable_id); }); + static::created(function (BitrixId $bitrixId) { if (!$bitrixId->bx_id) diff --git a/app/Modules/Main/Database/Migrations/2025_11_13_000001_create_city_appends_table.php b/app/Modules/Main/Database/Migrations/2025_11_13_000001_create_city_appends_table.php new file mode 100644 index 0000000..c209111 --- /dev/null +++ b/app/Modules/Main/Database/Migrations/2025_11_13_000001_create_city_appends_table.php @@ -0,0 +1,31 @@ +id(); + $table->morphs('append'); + $table->foreignId('city_id')->references('id')->on('cities')->onDelete('cascade'); + $table->text('data')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('client_contract'); + } +}; diff --git a/app/Modules/ClientCreateForm/Helpers/helper.php b/app/Modules/Main/Helpers/helper.php similarity index 58% rename from app/Modules/ClientCreateForm/Helpers/helper.php rename to app/Modules/Main/Helpers/helper.php index a8dffe9..9e648a8 100644 --- a/app/Modules/ClientCreateForm/Helpers/helper.php +++ b/app/Modules/Main/Helpers/helper.php @@ -1,7 +1,9 @@ user()->id); + $cityManager = CityManager::where('user_id', auth()->user()->id); + if ($cityManager->count()) + { + $agents = Agent::whereIn('company_id', Company::where('city_id', $cityManager->city_id)->get()->pluck('company_id')); + } + else + { + $agents = Agent::where('user_id', auth()->user()->id); + } } - $agents->with('company:id,name'); $agents->with('user:id,name'); return $agents->get()->toArray(); @@ -78,4 +87,31 @@ function GetAvailableComplexes() } return []; } +} + +if (!function_exists('GetAvailableCities')) +{ + function GetAvailableAgents() + { + $agents = []; + if ($adminCompany = AdminCompanyOfUser()) + { + $agents = Agent::where('company_id', $adminCompany->id); + } + else + { + $cityManager = CityManager::where('user_id', auth()->user()->id); + if ($cityManager->count()) + { + $agents = Agent::whereIn('company_id', Company::where('city_id', $cityManager->city_id)->get()->pluck('company_id')); + } + else + { + $agents = Agent::where('user_id', auth()->user()->id); + } + } + $agents->with('company:id,name'); + $agents->with('user:id,name'); + return $agents->get()->toArray(); + } } \ No newline at end of file diff --git a/app/Modules/Main/Models/CityAppend.php b/app/Modules/Main/Models/CityAppend.php new file mode 100644 index 0000000..1fa1f8a --- /dev/null +++ b/app/Modules/Main/Models/CityAppend.php @@ -0,0 +1,22 @@ +morphTo(); + } +} diff --git a/app/Modules/Main/Providers/ModuleServiceProvider.php b/app/Modules/Main/Providers/ModuleServiceProvider.php index 44455c7..6bf4867 100644 --- a/app/Modules/Main/Providers/ModuleServiceProvider.php +++ b/app/Modules/Main/Providers/ModuleServiceProvider.php @@ -19,13 +19,14 @@ public function register() public function boot() { + $this->registerPolicies(); $this->registerViews(); $this->registerLivewireViews(); $this->registerMigrations(); $this->registerConfig(); $this->registerComponent(); $this->registerLivewire(); - $this->registerPolicies(); + $this->registerHelpers(); } protected function registerViews() @@ -77,4 +78,13 @@ protected function registerPolicies() { Gate::policy(\Modules\Main\Models\Company\Company::class, \Modules\Main\Http\Policies\CompanyPolicy::class); } + + protected function registerHelpers() + { + $files = glob(__DIR__ . '/../Helpers/' . "*.php"); + foreach ($files as $key => $file) + { + require_once $file; + } + } } \ No newline at end of file diff --git a/app/Modules/Main/Traits/CityAppendTrait.php b/app/Modules/Main/Traits/CityAppendTrait.php new file mode 100644 index 0000000..70a40ee --- /dev/null +++ b/app/Modules/Main/Traits/CityAppendTrait.php @@ -0,0 +1,23 @@ +MorphMany(CityAppend::class, 'append'); + } + + public function byCity(Builder $query, $cityId) + { + //return $query->where('category', $category); + } +} + + diff --git a/app/Modules/Post/Models/Post.php b/app/Modules/Post/Models/Post.php index 661e3f4..7d48229 100644 --- a/app/Modules/Post/Models/Post.php +++ b/app/Modules/Post/Models/Post.php @@ -2,11 +2,17 @@ namespace Modules\Post\Models; -use Illuminate\Database\Eloquent\Factories\HasFactory; +use Modules\Main\Models\City; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\HasManyThrough; + +use Modules\Main\Traits\CityAppendTrait; + class Post extends Model { use HasFactory; + use CityAppendTrait; protected $fillable = [ 'name', diff --git a/app/Modules/User/Models/User.php b/app/Modules/User/Models/User.php index 5976a0c..dc0877b 100644 --- a/app/Modules/User/Models/User.php +++ b/app/Modules/User/Models/User.php @@ -57,6 +57,30 @@ public function getPartialsName() 'familyName' => (array_key_exists(2, $name) ? $name[2] : '') ]; } + /** + * Функция проверят наличие роли у пользователя + * @param mixed $roleId - лучше брать из констант модели Modules\User\Models\Role + * @return bool + */ + public function hasRole($roleId) + { + $roles = $this->roles()->get(); + if ($roles->where('id', $roleId)->count()) + { + return true; + } + return false; + } + + public function isAdmin() + { + return $this->hasRole(Role::SUPER_ADMIN); + } + + public function isCityManager() + { + return $this->hasRole(Role::CITY_MANAGER); + } public function roles(): HasManyThrough { @@ -75,4 +99,5 @@ public function roles(): HasManyThrough ); } + } diff --git a/app/Modules/User/Providers/AuthServiceProvider.php b/app/Modules/User/Providers/AuthServiceProvider.php new file mode 100644 index 0000000..3628198 --- /dev/null +++ b/app/Modules/User/Providers/AuthServiceProvider.php @@ -0,0 +1,36 @@ +id) + ->where('role_id', Role::SUPER_ADMIN)->count() + ) + { + abort(403, 'Unauthorized action'); + } + return true; + }); + } +} \ No newline at end of file diff --git a/app/Modules/User/Providers/ModuleServiceProvider.php b/app/Modules/User/Providers/ModuleServiceProvider.php index 2c2e9f3..82b5ac3 100644 --- a/app/Modules/User/Providers/ModuleServiceProvider.php +++ b/app/Modules/User/Providers/ModuleServiceProvider.php @@ -12,6 +12,7 @@ class ModuleServiceProvider extends ServiceProvider public function register() { + $this->app->register(AuthServiceProvider::class); $this->app->register(RouteServiceProvider::class); }