instances added god may help

This commit is contained in:
2026-02-23 12:58:19 +01:00
parent 25370a1a55
commit 99db252f60
290 changed files with 9858 additions and 4914 deletions

View File

@@ -2,15 +2,18 @@
namespace MintyPHP\Support;
use MintyPHP\Router;
use MintyPHP\Service\Access\PermissionService;
use MintyPHP\Service\Tenant\TenantService;
use MintyPHP\Service\Auth\AuthService;
use MintyPHP\Http\Request;
use MintyPHP\Router;
use MintyPHP\Service\Access\AccessServicesFactory;
use MintyPHP\Service\Access\PermissionGateway;
use MintyPHP\Service\Auth\AuthServicesFactory;
use MintyPHP\Service\Directory\DirectoryServicesFactory;
class Guard
{
private const TENANT_REFRESH_INTERVAL = 60;
private static ?AccessServicesFactory $accessServicesFactory = null;
private static ?PermissionGateway $permissionGateway = null;
public static function requireLogin(string $redirect = 'login'): void
{
@@ -20,7 +23,7 @@ class Guard
}
self::refreshTenantContext();
if (!empty($_SESSION['no_active_tenant'])) {
AuthService::logout();
(new AuthServicesFactory())->createAuthService()->logout();
Flash::error('No active tenant assigned', 'login', 'no_active_tenant');
Router::redirect($redirect);
}
@@ -34,7 +37,7 @@ class Guard
}
$tenantId = (int) $currentTenant['id'];
$tenant = TenantService::findById($tenantId);
$tenant = (new DirectoryServicesFactory())->createTenantService()->findById($tenantId);
if ($tenant) {
return;
}
@@ -42,7 +45,7 @@ class Guard
// Current tenant was deleted, refresh session data
$userId = (int) ($_SESSION['user']['id'] ?? 0);
if ($userId > 0) {
AuthService::loadTenantDataIntoSession($userId);
(new AuthServicesFactory())->createAuthService()->loadTenantDataIntoSession($userId);
} else {
unset($_SESSION['current_tenant']);
}
@@ -59,7 +62,7 @@ class Guard
if ($last > 0 && ($now - $last) < self::TENANT_REFRESH_INTERVAL) {
return;
}
AuthService::loadTenantDataIntoSession($userId);
(new AuthServicesFactory())->createAuthService()->loadTenantDataIntoSession($userId);
$_SESSION['tenant_context_refreshed_at'] = $now;
}
@@ -68,7 +71,7 @@ class Guard
self::requireLogin();
self::validateCurrentTenant();
$userId = (int) ($_SESSION['user']['id'] ?? 0);
if (!$userId || !PermissionService::userHas($userId, $permissionKey)) {
if (!$userId || !self::permissionGateway()->userHas($userId, $permissionKey)) {
Flash::error('Permission denied', $redirect, 'permission_denied');
Router::redirect($redirect);
}
@@ -79,7 +82,7 @@ class Guard
self::requireLogin();
self::validateCurrentTenant();
$userId = (int) ($_SESSION['user']['id'] ?? 0);
if (!$userId || !PermissionService::userHas($userId, $permissionKey)) {
if (!$userId || !self::permissionGateway()->userHas($userId, $permissionKey)) {
if (Request::wantsJson()) {
http_response_code(403);
header('Content-Type: application/json; charset=utf-8');
@@ -89,4 +92,24 @@ class Guard
Router::redirect('error/forbidden?url=' . urlencode(Request::pathWithQuery()));
}
}
private static function permissionGateway(): PermissionGateway
{
if (self::$permissionGateway instanceof PermissionGateway) {
return self::$permissionGateway;
}
self::$permissionGateway = self::accessServicesFactory()->createPermissionGateway();
return self::$permissionGateway;
}
private static function accessServicesFactory(): AccessServicesFactory
{
if (self::$accessServicesFactory instanceof AccessServicesFactory) {
return self::$accessServicesFactory;
}
self::$accessServicesFactory = new AccessServicesFactory();
return self::$accessServicesFactory;
}
}