79 lines
3.1 KiB
PHP
79 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace App\Filters;
|
|
|
|
use CodeIgniter\Filters\FilterInterface;
|
|
use CodeIgniter\HTTP\RequestInterface;
|
|
use CodeIgniter\HTTP\ResponseInterface;
|
|
|
|
class OrganizationFilter implements FilterInterface
|
|
{
|
|
|
|
public function before(RequestInterface $request, $arguments = null)
|
|
{
|
|
$session = session();
|
|
$uri = $request->getUri();
|
|
$currentPath = $uri->getPath();
|
|
|
|
// === БЛОК ДЛЯ ГОСТЕЙ (НЕЗАЛОГИНЕННЫХ) ===
|
|
if (!$session->get('isLoggedIn')) {
|
|
// Список публичных маршрутов для гостей
|
|
$publicRoutes = [
|
|
'/',
|
|
'/login',
|
|
'/register',
|
|
'/register/success',
|
|
'/auth/verify',
|
|
'/auth/resend-verification',
|
|
];
|
|
|
|
if (!in_array($currentPath, $publicRoutes)) {
|
|
// Если гость лезет не туда (например /organizations) — на главную
|
|
return redirect()->to('/');
|
|
}
|
|
// Иначе пропускаем
|
|
return;
|
|
}
|
|
// =======================================
|
|
|
|
// === БЛОК ДЛЯ ЗАЛОГИНЕННЫХ ===
|
|
|
|
// Список маршрутов, доступных БЕЗ выбранной организации
|
|
$publicAuthRoutes = [
|
|
'/login',
|
|
'/register',
|
|
'/logout',
|
|
'/register/success',
|
|
'/auth/verify',
|
|
'/auth/resend-verification',
|
|
'/organizations',
|
|
'/organizations/create',
|
|
'/organizations/switch' // Начало пути для переключения
|
|
];
|
|
|
|
// Если мы на этих маршрутах — проверка orgId не нужна (мы просто выбираем её)
|
|
if (in_array($currentPath, $publicAuthRoutes) || strpos($currentPath, '/organizations/switch') === 0) {
|
|
return;
|
|
}
|
|
|
|
// Если мы попадаем сюда — значит пользователь идет на закрытую страницу (например /crm)
|
|
// или на главную (/).
|
|
|
|
// Главную страницу (/) мы проверяем на уровне контроллера Home::index,
|
|
// поэтому фильтр для '/' можно пропускать, ИЛИ проверить здесь.
|
|
// Пропустим '/', чтобы контроллер сам решил: редиректить на /organizations или показывать дашборд.
|
|
if ($currentPath === '/') {
|
|
return;
|
|
}
|
|
|
|
// Для всех остальных закрытых страниц проверяем active_org_id
|
|
if (empty(session()->get('active_org_id'))) {
|
|
return redirect()->to('/organizations');
|
|
}
|
|
}
|
|
|
|
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
|
|
{
|
|
// Do nothing
|
|
}
|
|
} |