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 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.
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
.
#[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ů.
Stačí zaregistrovat nový recipe MyUserRecipe
.
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.