Many fixes
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filters;
|
||||
|
||||
use CodeIgniter\Filters\FilterInterface;
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use App\Services\ModuleSubscriptionService;
|
||||
|
||||
/**
|
||||
* Фильтр проверки подписки на модуль
|
||||
*
|
||||
* Проверяет, есть ли у организации активная подписка на указанный модуль.
|
||||
* Если подписки нет - перенаправляет на dashboard с сообщением об ошибке.
|
||||
*/
|
||||
class ModuleSubscriptionFilter implements FilterInterface
|
||||
{
|
||||
/**
|
||||
* Проверка подписки перед выполнением запроса
|
||||
*/
|
||||
public function before(RequestInterface $request, $arguments = null)
|
||||
{
|
||||
if (!$arguments) {
|
||||
return;
|
||||
}
|
||||
|
||||
$moduleCode = $arguments[0] ?? null;
|
||||
if (!$moduleCode) {
|
||||
return;
|
||||
}
|
||||
|
||||
$session = session();
|
||||
$orgId = $session->get('active_org_id');
|
||||
|
||||
// Если организация не выбрана - пропускаем (другие фильтры обработают)
|
||||
if (!$orgId) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Базовый модуль всегда доступен
|
||||
if ($moduleCode === 'base') {
|
||||
return;
|
||||
}
|
||||
|
||||
$subscriptionService = new ModuleSubscriptionService();
|
||||
|
||||
// Проверяем доступность модуля
|
||||
if (!$subscriptionService->isModuleAvailable($moduleCode, $orgId)) {
|
||||
$session->setFlashdata('error', 'Модуль "' . $this->getModuleName($moduleCode) . '" не активен для вашей организации');
|
||||
return redirect()->to('/');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение читаемого имени модуля
|
||||
*/
|
||||
protected function getModuleName(string $moduleCode): string
|
||||
{
|
||||
$names = [
|
||||
'crm' => 'CRM',
|
||||
'booking' => 'Бронирования',
|
||||
'tasks' => 'Задачи',
|
||||
'proof' => 'Proof',
|
||||
];
|
||||
return $names[$moduleCode] ?? $moduleCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обработка ответа после выполнения запроса
|
||||
*/
|
||||
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
|
||||
{
|
||||
// Ничего не делаем после запроса
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user