Admin Service

Třída Moony\bootstrap\core\services\Admin poskytuje statické metody pro správu uživatelů z admin panelu. Admin kontrolery se umísťují do app/controllers/admin/, views do app/views/admin/, joby do app/jobs/admin/.

Struktura

app/
├── controllers/admin/     // Admin kontrolery
├── jobs/admin/            // Admin joby (SideNavProcessJob)
├── views/admin/           // Admin šablony
└── constants/admin/       // Admin konstanty (SideNavStructure, AdminRightsStructure)

Správa uživatelů

Admin::createUser(string $email, string $password, array $data = [])Vytvoří uživatele (heslo BCRYPT, email automaticky ověřen)
Admin::updateUser(int $userId, array $data)Aktualizuje uživatele. Heslo se automaticky hashuje.
Admin::deleteUser(int $userId)Smaže uživatele
Admin::blockUser(int $userId)Zablokuje účet (nastaví blocked_at)
Admin::unBlockUser(int $userId)Odblokuje účet
Admin::verifyRegistration(int $userId)Ověří registrační email
Admin::getUserDataById(int $userId)Vrátí data uživatele
Admin::loginAsUser(int $userId)Impersonace — admin se přihlásí jako uživatel. Po odhlášení se vrátí zpět na admin.

Role a práva

Admin práva se definují v AdminRightsEnum. Uživatel získá práva přes admin role. Práva se kešují v sloupci admin_rights (JSON pole).

// Kontrola práv v controlleru (atribut)
#[Admin(AdminRightsEnum::USERS_VIEW)]
#[Route('/admin/users')]
public function users(): View {}

// Kontrola práv v kódu
if(User::hasAdminRight(AdminRightsEnum::USERS_EDIT)) {
    // ...
}

// Kontrola práv v Twig
{% if admin('USERS_VIEW') %}
    <a href="/admin/users">Uživatelé</a>
{% endif %}

Aktualizace práv

// Po změně rolí — přepočítá a uloží práva do cache
Admin::updateAdminRightsCache($userId);
Super admin (is_super_admin = 1) má vždy všechna práva bez ohledu na přiřazené role.

Admin logování

Všechny admin akce by měly být logovány pro audit trail. Logují se staré a nové hodnoty.

Admin::log(
    AdminEventsLogEnum::USER_UPDATE,
    $newValues,     // ['email' => 'new@email.com']
    $oldValues,     // ['email' => 'old@email.com'] — automaticky se ořízne na klíče z newValues
    $userId         // volitelný identifikátor
);
Admin logování vyžaduje AdminEventsLogEnum s definovanými akcemi. Každá nová admin operace by měla mít odpovídající enum hodnotu.