Skip to content

Flaga Superuser (is_superuser) ​

Flaga Superuser (is_superuser) jest najwyższym poziomem uprawnienia administracyjnego w architekturze platformy Ammonly. Zapewnia bezwarunkowy dostęp do wszystkich modułów, zasobów, konfiguracji systemowych oraz danych poufnych.

Uprawnienie krytyczne

Uprawnienie Superuser powinno być nadawane z najwyższą rozwagą wyłącznie zaufanym administratorom infrastruktury. Użytkownik z tą flagą omija wszelkie ograniczenia profilowe i polityki widoczności rekordów.


Spis treści ​


1. Rola i zakres uprawnień Superusera ​

W przeciwieństwie do standardowych profili ról ({tier}_mod_profiles_records), które precyzyjnie definiują dostęp per moduł i per pole, flaga is_superuser = 1 w tabeli użytkowników (p_mod_users_records) działa wyłącznie wewnątrz centralnego strażnika PermissionGuard (App\Core\Engine):


2. Przegląd uprawnień specjalnych ​

Użytkownik z aktywną flagą Superuser posiada następujące uprawnienia nadrzędne:

  1. Dostęp do rekordów Ukrytych (special_access = 0):
    • Jako jedyny widzi i może zarządzać rekordami oznaczonymi jako ukryte (SpecialAccess::HIDDEN).
    • Standardowi użytkownicy nie mają możliwości wykrycia istnienia takich rekordów.
  2. Wyłączność na zmianę poziomu Dostępu specjalnego:
    • Zmiana wartości w polu special_access (przenoszenie do archiwum, usuwanie miękkie, ukrywanie, przywracanie) jest dozwolona wyłącznie dla superusera.
  3. Pominięcie zakresu właścicielskiego (Owner Scope):
    • Superuser widzi i może edytować wszystkie rekordy we wszystkich modułach, niezależnie od tego, kto jest właścicielem (owner) lub współwłaścicielem (co_owners).
  4. Pominięcie reguł modułów prywatnych:
    • Bezpośredni dostęp do modułów oznaczonych jako PRIVATE lub wymagających podwyższonych ról.
  5. Dostęp do konfiguracji silnika:
    • Zarządzanie metadanymi modułów (system_modules), definicjami pól (system_fields), słownikami (system_picklists), profilami uprawnień (system_profiles) oraz zadaniami CRON (system_cron).

3. Architektura weryfikacji w PermissionGuard ​

Silnik autoryzacji w klasie App\Core\Engine\Application\Security\PermissionGuard realizuje weryfikację według rygorystycznego protokołu:

php
// Weryfikacja uprawnień do odczytu modułu
public function assertReadAccess(ModuleMetadata $module, PermissionContext $context): void
{
    if (!$context->isAuthenticated()) {
        throw PermissionDeniedException::superuserRequired($module->name);
    }

    // Superuser natychmiast uzyskuje autoryzację
    if ($context->isSuperuser) {
        return;
    }

    // Pozostali użytkownicy podlegają weryfikacji profilu i reguł modułu
    // ...
}

Podobnie w assertWriteAccess(), obecność flagi $context->isSuperuser pozwala na ominięcie blokad zapisu narzuconych przez reguły współdzielenia i uprawnienia polowe.


4. Wyłączność zarządzania Dostępem specjalnym ​

W kontekście pola Dostęp specjalny superuser posiada wyłączne prawa:

OperacjaUżytkownik StandardowySuperuser
Odczyt rekordów Widocznych (1)Zgodnie z uprawnieniamiPełny dostęp
Odczyt rekordów Zarchiwizowanych (2) / Kosz (3)Tylko własne / współwłasnośćPełny dostęp
Odczyt rekordów Ukrytych (0)Brak dostępu (403)Pełny dostęp
Zmiana wartości pola special_accessZablokowane (Pole disabled / strip payload)Dozwolone
Zmiana statusu biznesowego statusZgodnie z profilemPełny dostęp

5. Bezpieczeństwo i audytowalność operacji ​

Wszystkie operacje wykonywane przez superuserów są rygorystycznie rejestrowane w dziennikach audytowych danego tieru (p_, h_, c_, s_):

  • Dziennik odczytów: {tier}_logs_audit_read_records
  • Dziennik zmian: {tier}_logs_audit_update_records (ze szczegółowym diffem przed i po zmianie)
  • Dziennik usunięć: {tier}_logs_audit_delete_records
  • Dziennik logowania i sesji: p_logs_user_auth_records

Dodatkowo, użytkownik nie może odebrać uprawnień superusera samemu sobie, jeżeli w systemie nie ma przynajmniej jednego innego aktywnego superusera.

Ammonly Documentation System