add superadmin dashboard. subscriptions

This commit is contained in:
root
2026-01-13 20:03:16 +03:00
parent 3c24c250e5
commit edb4df7e37
36 changed files with 3329 additions and 100 deletions
+98
View File
@@ -0,0 +1,98 @@
<?php
namespace App\Filters;
use App\Controllers\Auth;
use App\Models\UserModel;
use App\Models\OrganizationUserModel;
use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
/**
* AuthFilter - Фильтр аутентификации с поддержкой Remember Me
*
* Проверяет авторизацию пользователя двумя способами:
* 1. По сессии (стандартный способ)
* 2. По remember-токену из cookies (если сессия отсутствует)
*
* Если пользователь не авторизован — редирект на /login.
*
* Применяется к маршрутам, которые требуют авторизации, но НЕ требуют
* выбранной организации (например, профиль, выбор организации).
*/
class AuthFilter implements FilterInterface
{
/**
* Проверка аутентификации перед обработкой запроса
*
* @param RequestInterface $request
* @param array|null $arguments
* @return ResponseInterface|void
*/
public function before(RequestInterface $request, $arguments = null)
{
$session = session();
// Если пользователь уже авторизован по сессии — пропускаем
if ($session->get('isLoggedIn')) {
return;
}
// Проверяем remember-токен
$userId = Auth::checkRememberToken();
if ($userId !== null) {
// Токен найден и валиден — восстанавливаем сессию
$userModel = new UserModel();
$user = $userModel->find($userId);
if ($user && $user['email_verified']) {
$orgUserModel = new OrganizationUserModel();
$userOrgs = $orgUserModel->where('user_id', $user['id'])->findAll();
if (!empty($userOrgs)) {
// Восстанавливаем данные сессии
$sessionData = [
'user_id' => $user['id'],
'email' => $user['email'],
'name' => $user['name'],
'isLoggedIn' => true,
];
// Выбираем организацию если она была
if (count($userOrgs) === 1) {
$sessionData['active_org_id'] = $userOrgs[0]['organization_id'];
}
$session->set($sessionData);
log_message('info', "User {$user['email']} logged in via remember token");
return;
}
}
// Токен недействителен — удаляем его
$response = service('response');
$response->deleteCookie('remember_selector');
$response->deleteCookie('remember_token');
}
// Пользователь не авторизован — редирект на логин
return redirect()->to('/login');
}
/**
* Обработка после выполнения запроса
*
* @param RequestInterface $request
* @param ResponseInterface $response
* @param array|null $arguments
* @return void
*/
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null): void
{
// Ничего не делаем после запроса
}
}