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.
