niedziela, 3 października 2010

Zabezpieczamy symfony

Symfony ma jedną dość dobrą zaletę . Mianowicie pluginy. Zauważyłem ze jest jedno przewodnie zdanie które doskonale reprezentuje symfony a mianowicie "po co wymyślać znów koło? ". No tak po co mamy je wymyślać skoro możemy z niego korzystać :).

Dziś zajmiemy się autentyfikacją użytkownika. I nie będę pisał skomplikowanych wierszy kodu :) bo po co skoro są pluginy :). Zaczynajmy więc:

Pierwsza sprawa to zabezpieczenia wejścia dla konkretnej aplikacji w symfony co robimy za pomocą zmiany kodu w:

apps/nazwa/config/security.yml

default:
  is_secure: false     //oczywiscie zmieniamy na true

Tym sposobem gdy będziecie chcieli wejść sobie po adresie na aplikacje w tym przypadku "nazwa" wyskoczy informacja iż strona nie jest dostępna publicznie.

Następnie przydałby się nam plugin. W tym celu w pierwszej kolejności sprawdźmy czy mamy zainstalowany PEAR ponieważ jest on wymagany dla następującego polecenia dla symfony:

php symfony plugin:install sfDoctrinePlugin

Jeżeli korzystamy z tego sposobu instalacji to automatycznie zostaje zmieniona
// config/ProjectConfiguration.class.php
zatem nie mamy się już czym przejmować. Jeżeli natomiast robimy to w innym sposobem to musimy pamiętać o włączeniu pluginu ręcznie co prezentuje poniżej:


// config/ProjectConfiguration.class.php
class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->enablePlugins(array(
      'sfDoctrinePlugin', 
      'sfDoctrineGuardPlugin'
    ));
  }
}


Po zainstalowaniu pluginu wykonujemy standardowe polecenie:

php symfony doctrine:build --all --and-load --no-confirmation

Następnie zmieniamy ustawienia w settings.yml  na odpowednie :


# apps/nazwa/config/settings.yml
all:
  .settings:
    enabled_modules: [default, sfGuardAuth]
 
    # ...
 
  .actions:
    login_module:    sfGuardAuth
    login_action:    signin
 
    # ...

Po tych zabiegach powinniśmy po odświeżeniu strony zobaczyć formularz logowania :)  I to jest właśnie urok symfony :)

Następnie utwórzmy jakiegoś usera do logowania:

php symfony guard:create-user abc SecrestPass

php symfony guard:promote abc

Od teraz możemy posługiwać się metodą isAuthenticated() która zwara czy jesteśmy zalogowaniu czy nie:) zatem jeżeli chcemy aby tylko zalogowani wdzieli np  menu to zwyczajnie w layoucie dajemy:


// apps/nazwa/templates/layout.php
<?php if ($sf_user->isAuthenticated()): ?>
  <div id="menu"
      //cos w menu :)
</div>
<?php endif ?>

Jak widać prawie nie pisząc kodu można zrobić w symfony ładnie wyglądający skrypt logowania. 

Pozostało jeszcze aby zalogowani użytkownicy mogli się wylogowac: 


wiec dodajmy w miejscu "cos w menu" <?php echo link_to('Logout', 'sf_guard_signout') ?> 

Prawda że to proste. Jeżeli ktoś chce bardziej zainteresować tą tematyką to zapraszam do studiowania tego adresu: http://www.symfony-project.org/jobeet/1_4/Doctrine/en/13.

Brak komentarzy:

Prześlij komentarz