Přeskočit na hlavní obsah

Uživatelé

Za uživatele lze považovat fyzické osoby i systémové uživatele, které se mohou přihlásit do aplikace.

Vytvoření uživatele

Nového uživatele lze vytvořit přímo přes kolekci uživatelů na adrese http://localhost:8090/app/collections/user/create. Uživateli zde můžete nastavit heslo a přidělit různé role.

Vytvoření uživatele

Vytvoření uživatele přes konzoli

Pomocí konzolového příkazu lze vytvořit nového uživatele s definovaným emailem, heslem a rolí.

bin/console app:user:create <email> <password> --role <role-name>

Tento příkaz vytvoří nového uživatele s rolí editor. Pokud tato role ještě neexistuje, přidělí se ji veškeré resources (plná oprávnění). Pokud role již existuje, dojde pouze k přiřazení role vytvářenému uživateli.

Přihlášení jako uživatel

Klasické přihlášení

Uživatel se může přihlásit na adrese http://localhost:8090/app. Narozdíl od přihlášení administrátora - zde není vidět logo aplikace.

Uživatelský login

Přihlášení pomocí megio-api

Stejně jako v případě administrátorů, můžete se přihlásit pomocí JS/TS knihovny megio-api s jedinným rozdílem - zde se používá zdroj user, který reprezentuje stejnojmennou databázovou tabulku.

const resp = await megio.auth.loginByEmail('jz@strategio.dev', 'Test1234', 'user')

if (resp.ok) {
const { bearer_token, bearer_token_id, user } = resp.data
// Přesměruj uživatele například do jeho profilu.
}

Přihlášení pomocí HTTP requestu

Zde se také používá stejný postup jako v případě administrátorů.

Expirace JWT tokenu

Nastavení expirace tokenu je společná jak pro uživatele, tak i pro administrátory. Dobu expirace JWT tokenu lze nastavit v souboru .env pomocí proměnné:

AUTH_EXPIRATION=1day

Jak na vlastní autentizaci

Předpokládejme, že chcete vytvořit vlastní entitu (DB tabulku my_user), skrze kterou potřebujete umožnit přihlašování uživatelů. Zároveň potřebujete spravovat jejich oprávnění v admin panelu.

Vytvoření autentizační entity

Stačí tedy vytvořit novou entitu MyUser, která bude implementovat rozhraní ICrudable a IAuthenticable.

app/Database/Entity/MyUser.php
#[ORM\Table(name: '`my_user`')]
#[ORM\Entity(repositoryClass: UserRepository::class)]
#[ORM\HasLifecycleCallbacks]
class MyUser implements ICrudable, IAuthenticable
{
// Definice atributů entity
use TId, TCreatedAt, TUpdatedAt, TEmail, TPassword, TLastLogin;

// Implementace metod pro autentizaci
use TRoleMethods, TResourceMethods;

// Definice relace s rolemi
/** @var Collection<int, Role> */
#[ORM\ManyToMany(targetEntity: Role::class)]
#[ORM\JoinTable(name: 'my_user_has_role')]
#[ORM\JoinColumn(
name: "my_user_id",
referencedColumnName: "id",
onDelete: 'CASCADE'
)]
#[ORM\InverseJoinColumn(
name: "role_id",
referencedColumnName: "id",
onDelete: 'CASCADE'
)]
protected Collection $roles;

public function __construct()
{
// Inicializace array-collection pro role
$this->roles = new ArrayCollection();
}
}

Nyní stačí spustit migraci bin/console diff a bin/console migrate a máte vytvořenou entitu MyUser, která je schopna autentizovat uživatele.

Přihlášení přes tabulku my_user

const resp = await megio.auth.loginByEmail('jz@strategio.dev', 'Test1234', 'my_user')

if (resp.ok) {
const { bearer_token, bearer_token_id, user } = resp.data
// Přesměruj uživatele například do jeho profilu.
}

Vytvoření datagridu pro MyUser

Jelikož entita MyUser implementuje rozhraní ICrudable, můžete snadno vytvořit i datagrid pro správu uživatelů.

Datagrid pro uživatele

Stačí zaregistrovat nový recipe MyUserRecipe.

app/Recipe/MyUserRecipe.php
class MyUserRecipe extends CollectionRecipe
{
public function source(): string
{
return MyUser::class;
}

public function key(): string
{
return 'my_user';
}
}

A to je vše! Nyní máte vytvořenou entitu MyUser, která je schopna autentizovat uživatele. Zároveň lze spravovat oprávnění každého uživatele v admin panelu. Entita je také plně konfigurovatelná a můžete si ji upravit dle svých potřeb.