#Silex Users App
- registruje a spravuje uživatele v databázi.
- registrovaní uživatelé se mohou přihlašovat do aplikace.
- některé routy / controllery vyžadují přihlášeného uživatele, jiné ne.
- je možné i nadefinovat uživatele v configu
- pro model data používá ORM + MySQL
- pro views Twig
- pro zabezpečení Symfony\Security component
- pro uchování uživatelského kontextu Symfony\Session
- Symfony\Translation pro překlady prvků aplikace, zvolený jazyk ukládá do Session
- což porušuje bezestavovost http protokolu a REST principy (jedna url vrací různá data na základě kontextu). správná implementace by měla brát v potaz
Accept-Language
request header a/nebo_locale
query parameter
- což porušuje bezestavovost http protokolu a REST principy (jedna url vrací různá data na základě kontextu). správná implementace by měla brát v potaz
- silex security provider
- pro html/css layout unsemantic, pro html/css ui bootstrap
- download silex-users
-
z githubu kor3k/silex-users
git clone https://github.com/kor3k/silex-users.git
-
download composer
php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
-
vytvořit složky
/cache
a/logs
-
vytvořit schéma v databázi
- dle
/Resources/sql/users.sql
- v MySQL Workbench - Open
/Resources/sql/users.mwb
, Database -> Synchronize Model
- dle
-
upravit nastavení ve front controlleru
/web/index.php
- připojení k db, mailer user atd
Po přihlášení uživatele je ten dostupný přes Application::user
, tedy $app->user()
v php a {{ app.user }}
v Twigu.
Pozor ovšem, hodnota metody může být:
- null (na routě mimo firewall)
- string 'anon.' (na routě za firewallem autorizované anonymně)
- Symfony\Component\Security\Core\User\UserInterface (na routě za fw autorizované plně)
Takže je lepší před přístupem kontrolovat roli IS_AUTHENTICATED_FULLY
nebo ROLE_USER
pomocí Application::isGranted
:
if( $app->isGranted( 'ROLE_USER' ) )
{
echo $app->user()->getUsername();
}
else
{
echo 'anonymous';
}
a v Twigu:
{% if is_granted( 'ROLE_USER' ) %}
{{ app.user.username }}
{% else %}
anonymous
{% endif %}
-
metoda
Application::isGranted
vrací true | false pokud uživatel má nebo nemá danou roli. -
pokud ji zavoláme s druhým argumentem true, tak v případě, že uživatel roli nemá, nevrací false, nýbrž vyhodí
AccessDeniedException
:$app->isGranted( 'ROLE_USER' , true );
-
update dependencies
php composer.phar self-update && php composer.phar update --optimize-autoloader
-
cesta k php musí být v systémové Path proměnné:
- Control Panels -> System -> Advanced system settings -> Environment Variables -> System Variables -> Path -> Edit,
- přidat k současné hodnotě
;c:\wamp\bin\php\php5.5\
-
příkazy se spouští v git bashi
- sourcetree , Download embedded git
- msysgit