first commit
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
<?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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user