Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V  < 1 2 3 >  
Reply to this topicStart new topic
> [ZendFramework] Logowanie użytkownika
Sabistik
post 7.07.2009, 10:27:18
Post #21


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $objResult->getCode();
  3. ?>

Dostajesz odpowiedni kod błędu.
Go to the top of the page
+Quote Post
in5ane
post 8.07.2009, 06:43:13
Post #22





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Cytat(Sabistik @ 7.07.2009, 09:27:18 ) *
  1. <?php
  2. $objResult->getCode();
  3. ?>

Dostajesz odpowiedni kod błędu.


Dzięki, a ogólnie skrypt dobrze napisany?

Wziąłem się teraz za zend_acl. Utworzyłem sobie kod (przy pomocy manuala):
  1. <?php
  2. require_once 'Zend/Acl.php';
  3. $acl = new Zend_Acl();
  4. require_once 'Zend/Acl/Role.php';
  5.  
  6. $acl->addRole(new Zend_Acl_Role('guest'));
  7. $acl->addRole(new Zend_Acl_Role('user'), 'guest');
  8. $acl->addRole(new Zend_Acl_Role('administrator'));
  9.  
  10. $acl->allow('guest', null, 'index');
  11. $acl->allow('user', null, array('announcements', 'contact'));
  12. $acl->allow('administrator');
  13. ?>


I co ja teraz tak naprawdę mam z nim zrobić? Gdzie go wklepać? Jak sprawdzać role (typ) użytkownika? Proszę o nakierowanie, bo tego w dokumentacji nie było.


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
viking
post 8.07.2009, 07:22:29
Post #23





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


http://weierophinney.net/matthew/archives/...-to-Models.html


--------------------
Go to the top of the page
+Quote Post
in5ane
post 8.07.2009, 09:48:50
Post #24





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Cytat(viking @ 8.07.2009, 06:22:29 ) *


No ogólnie przejrzałem i ładnie jest opisane, ale nie zostało uwzględnione w jakich plikach mam to zawrzeć. Ja osobiście myślę, że trzeba to zawrzeć jakoś w bootstraperze, ponieważ on jest (tak jakby) dołączany do każdej podstrony.

W moim skrypcie wszystko wygląda tak:
IndexController (jedna podstrona)
AccountController (logowanie, rejestracja)
AnnouncementsController (wyświetlanie ogłoszeń, wyświetlanie poszczególnego ogłoszenie [podstrona w tej pierwsze podstronie), dodawanie ogłoszeń)
AdminController (jedna podstrona z informacjami typu: bla bla bla, później będę rozbudowywał)
ContactController (jedna podstrona)

Swoje logowanie oczywiście mam w tym Account, i tam mam w indexAction sprawdzanie formularza i logowanie za pomocą Zend_Auth i domyślam się, że tam trzeba jakoś to połączyć z Zend_Acl.


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
viking
post 8.07.2009, 10:04:48
Post #25





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Cytat(in5ane @ 8.07.2009, 10:48:50 ) *
No ogólnie przejrzałem i ładnie jest opisane, ale nie zostało uwzględnione w jakich plikach mam to zawrzeć. Ja osobiście myślę, że trzeba to zawrzeć jakoś w bootstraperze, ponieważ on jest (tak jakby) dołączany do każdej podstrony.

Zastanów się przez chwilę. Jakie jest mapowanie ścieżek dla autoloadera?
I zobacz http://code.google.com/p/zendframeworkstor...anches/chapters


--------------------
Go to the top of the page
+Quote Post
in5ane
post 8.07.2009, 18:51:24
Post #26





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


No mapowanie ścieżek jest takie (przykład): Jakas_Tam_Sobie_Klasa <-- nazwa klasy i ścieżka, jakas/tam/sobie/klasaClass.php. Ale co mi to daje? Chciałbym się dowiedzieć jak mogę Zend_Acl zintegrować ze swoim systemem logowania.

W końcu wiem, że to (patrz niżej) trzeba umieścić w index.php (bootstraperze):
  1. <?php
  2. $acl = new Zend_Acl();
  3. $acl->add(new Zend_Acl_Resource('index'));
  4. $acl->add(new Zend_Acl_Resource('account'));
  5. $acl->add(new Zend_Acl_Resource('announcements'));
  6. $acl->add(new Zend_Acl_Resource('admin'));
  7. $acl->add(new Zend_Acl_Resource('contact'));
  8. $acl->addRole(new Zend_Acl_Role('guest'));
  9. $acl->addRole(new Zend_Acl_Role('member'), 'guest');
  10. $acl->addRole(new Zend_Acl_Role('admin'), 'member');
  11. $acl->allow('guest', 'index');
  12. $acl->allow('guest', 'contact');
  13. $acl->allow('member', 'account');
  14. $acl->allow('member', 'announcements');
  15. $acl->allow('admin');
  16. ?>


Co dalej muszę zrobić? Jakie pliki i gdzie utworzyć? Proszę o pomoce, nakierowanie - nie gotowce.

Poczytałem jeszcze trochę i już więcej wykombinowałem:

W library dwa pliczki:
  1. <?php
  2. class My_Controller_Helper_Acl {
  3.    public $acl;
  4.    
  5.    public function __construct() {
  6.        $this->acl = new Zend_Acl();
  7.    }
  8.    
  9.    public function setRoles() {
  10.        $this->acl->addRole(new Zend_Acl_Role('guest'));
  11.        $this->acl->addRole(new Zend_Acl_Role('user'));
  12.        $this->acl->addRole(new Zend_Acl_Role('admin'));
  13.    }
  14.    
  15.    public function setResources() {
  16.        $this->acl->add(new Zend_Acl_Resource('index'));
  17.        $this->acl->add(new Zend_Acl_Resource('account'));
  18.        $this->acl->add(new Zend_Acl_Resource('announcements'));
  19.        $this->acl->add(new Zend_Acl_Resource('admin'));
  20.        $this->acl->add(new Zend_Acl_Resource('contact'));
  21.    }
  22.  
  23.    public function setPrivilages() {
  24.        $this->acl->allow('guest', null, 'index');
  25.        $this->acl->allow('user', array('account', 'announcements', 'contact'));
  26.        $this->acl->allow('admin');
  27.    }
  28.    
  29.    public function setAcl() {
  30.        Zend_Registry::set('acl', $this->acl);
  31.    }
  32. }
  33. ?>

oraz
  1. <?php
  2. class My_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract {
  3.    public function preDispatch(Zend_Controller_Request_Abstract $request) {
  4.    
  5.        $application = new Zend_Session_Namespace('myApplication');
  6.        $acl = Zend_Registry::get('acl');
  7.        
  8.        if($application->currentRole == '') {
  9.            $roleName = 'guest'; // jezeli w sesji obecna role (typ) uzytkownika jest pusty, zostanie ustawione guest
  10.        } else {
  11.            $roleName = $application->currentRole; // w przeciwnym wypadku zapisujemy w zmiennej $roleName nasza role (typ) uzytkownika
  12.        }
  13.        
  14.        $privilageName = $application->loggedUser;
  15.        if(!$acl->isAllowed($roleName, null, $privilageName)) {
  16.            // cos tam, nie wejdziesz tutaj, bla bla...
  17.        }
  18.  
  19.    }
  20. }
  21. ?>


i w bootstraper (index.php):
  1. <?php
  2. // acl
  3. $helper= new My_Controller_Helper_Acl();
  4. $helper->setRoles();
  5. $helper->setResources();
  6. $helper->setPrivilages();
  7. $helper->setAcl();
  8. $frontController->registerPlugin(new My_Controller_Plugin_Acl());
  9. ?>


No i to ani nie popsuło strony, ani nie działa. Pewnie trzeba jakoś do tego acl wysłać role (typ) użytkownika (czy to użytkownik, czy to admin).


@edit: poprawiłem ten drugi plik Acl.php, starałem się zrobić, żeby dostawał w sesji role i nazwę, no ale nadal coś nie śmiga mi to. Może teraz mnie ktoś nakieruje?
Aha i dodałem też w logowaniu w kontrolerze:
  1. <?php
  2. protected $_application; // przed funkcjami
  3.  
  4.  
  5. $this->view->baseUrl = $this->_request->getBaseUrl(); // w init
  6. $this->_application = new Zend_Session_Namespace('myApplication'); // w init
  7.  
  8.  
  9. $this->_application->currentRole = $this->user->role; // w indexAction, jak juz sie zaloguje
  10. $this->_application->loggedUser = $this->user->login; // w indexAction, jak juz sie zaloguje
  11. ?>


No i i tak po każdej stronie można latać jak się chce ;/

Ten post edytował in5ane 8.07.2009, 18:50:32


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
omeck
post 8.07.2009, 21:39:14
Post #27





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(in5ane @ 8.07.2009, 19:51:24 ) *
  1. <?php
  2.        
  3.        $privilageName = $application->loggedUser;
  4.        if(!$acl->isAllowed($roleName, null, $privilageName)) {
  5.            // cos tam, nie wejdziesz tutaj, bla bla...
  6.        }
  7.  
  8.    }
  9. }
  10. ?>


Dlaczego $privilegeName wyciągasz z sesji? To powinien być zasób (u Ciebie index, account itd.). Możesz wyciągnąć np. nazwę kontrolera z request object i wtedy porównywać.

Ten post edytował omeck 8.07.2009, 21:39:33
Go to the top of the page
+Quote Post
in5ane
post 8.07.2009, 21:42:42
Post #28





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Do końca nie wiem, jak ma działać ta instrukcja warunkowa (wiem, że musi zabronić danemu użytkownikowi dostępu do podstrony), była ona zawarta w kilku tutorialach, które czytałem (tyle, że w każdym trochę inna).


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
omeck
post 8.07.2009, 22:08:50
Post #29





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Jeśli korzystasz z MVC, to do isAllowed przekaż kolejno parametry: rolę i zasób (w swoim systemie chyba nie chcesz sprawdzać bardziej szczegółowego dostępu np. do akcji, ale nie wiem :-))
U Ciebie w kodzie rolę chyba dobrze wyciągasz - z sesji użytkownika (zakładając, że ją dobrze przypisujesz winksmiley.jpg). W takim razie należy sprawdzić, czy dana rola ma dostęp do zasobu. Zasoby zdefiniowałeś chyba w index.php (Zend_Acl_Resource) oraz potem przypisałeś role do zasobów (metoda allow). Czy zasobami mają być nazwy kontrolerów? Jeśli tak, to coś takiego może Ci zadziałać:

  1. <?php
  2. $resource = $request->getParam('controller');
  3.  
  4. if(!$acl->isAllowed($roleName, $resource)) {
  5.           // cos tam, nie wejdziesz tutaj, bla bla...
  6. }
  7. ?>


pisane z palca, nie daje 100% gwarancji ;-)

Metoda z 3 argumentami świetnie nadaje się np. do sprawdzania dostępu jakiejś roli do konkretnej akcji konkretnego kontrolera
Go to the top of the page
+Quote Post
in5ane
post 8.07.2009, 22:13:39
Post #30





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Dzięki, no ale nie blokuje nic ;/

Tzn. zawsze IF przejdzie bez niczego i wyświetli z niego treść itp.. (czyli to bla bla...) i każda podstrona jest dostępna dla gościa. Możliwe, że z tymi danymi w sesji jest problem.


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
omeck
post 8.07.2009, 22:19:32
Post #31





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(in5ane @ 8.07.2009, 23:13:39 ) *
Dzięki, no ale nie blokuje nic ;/

Tzn. zawsze IF przejdzie bez niczego i wyświetli z niego treść itp.. (czyli to bla bla...) i każda podstrona jest dostępna dla gościa. Możliwe, że z tymi danymi w sesji jest problem.


Ale wchodzi Ci do if'a? Czy nigdy? Co w ogóle masz w if? Jeśli wchodzi, to musisz wewnątrz np. zrobić przekierowanie do jakiejś akcji logowania
Go to the top of the page
+Quote Post
in5ane
post 8.07.2009, 22:22:16
Post #32





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


No wchodzi mi do IF, dodałem sobie tam dla testu echo 'asd'; i zawsze wyświetla (na każdej podstronie). Ale dodałem też echo $application->currentRole; i nie wyświetla tego, więc chyba będzie jakiś problem z sesjami.


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
omeck
post 8.07.2009, 22:25:11
Post #33





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Czy w bootstrapie dałeś:
  1. <?php
  2. Zend_Session::start();
  3. ?>


questionmark.gif

Aha, w pluginie powinieneś odczytywać wartość sesji, a nie ją tworzyć ;-)

Ten post edytował omeck 8.07.2009, 22:27:25
Go to the top of the page
+Quote Post
in5ane
post 8.07.2009, 22:27:12
Post #34





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Tak, dałem. Zobaczyłem też, jak na sztywno dałem w $roleName guest albo admin, to nadal ten IF cały czas działał. Najpierw trzeba coś zrobić z tym IF'em, później z sesjami (bo na razie w $roleName mogę na sztywno wpisywać).


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
omeck
post 8.07.2009, 22:36:15
Post #35





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(in5ane @ 8.07.2009, 23:27:12 ) *
Tak, dałem. Zobaczyłem też, jak na sztywno dałem w $roleName guest albo admin, to nadal ten IF cały czas działał. Najpierw trzeba coś zrobić z tym IF'em, później z sesjami (bo na razie w $roleName mogę na sztywno wpisywać).


No dobra, ale:
  1. <?php
  2. $this->acl->allow('guest', null, 'index');
  3.       $this->acl->allow('user', array('account', 'announcements', 'contact'));
  4.       $this->acl->allow('admin');
  5. ?>


Gość ma dostęp wyłącznie do domyslnego modułu oraz zasobu index - przy każdym inny zasobie będzie Ci wchodził do If. Admin z kolei nie ma żadnych uprawnień...
Go to the top of the page
+Quote Post
in5ane
post 9.07.2009, 05:55:06
Post #36





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


No dobra, wiem o co Ci chodziło, doszedłem do tego, że jest w sumie dobrze, poza sesjami, mój kod teraz wygląda tak:

  1. <?php
  2. class My_Controller_Helper_Acl {
  3.    public $acl;
  4.    
  5.    public function __construct() {
  6.        $this->acl = new Zend_Acl();
  7.    }
  8.    
  9.    public function setRoles() {
  10.        $this->acl->addRole(new Zend_Acl_Role('guest'));
  11.        $this->acl->addRole(new Zend_Acl_Role('user'), 'guest');
  12.        $this->acl->addRole(new Zend_Acl_Role('admin'), 'user');
  13.    }
  14.    
  15.    public function setResources() {
  16.        $this->acl->add(new Zend_Acl_Resource('index'));
  17.        $this->acl->add(new Zend_Acl_Resource('account'));
  18.        $this->acl->add(new Zend_Acl_Resource('announcements'));
  19.        $this->acl->add(new Zend_Acl_Resource('admin'));
  20.        $this->acl->add(new Zend_Acl_Resource('contact'));
  21.    }
  22.  
  23.    public function setPrivilages() {
  24.        $this->acl->allow('guest', 'index');
  25.        $this->acl->allow('user', array('account', 'announcements', 'contact'));
  26.        $this->acl->allow('admin', 'admin');
  27.    }
  28.    
  29.    public function setAcl() {
  30.        Zend_Registry::set('acl', $this->acl);
  31.    }
  32. }
  33. ?>

Oczywiście muszę jeszcze te uprawnienia do podstron ustawić (do jakich podstron).

  1. <?php
  2. class My_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract {
  3.    public function preDispatch(Zend_Controller_Request_Abstract $request) {
  4.    
  5.        $application = new Zend_Session_Namespace('myApplication');        
  6.        if('user' == '') {
  7.            $roleName = 'guest'; // jezeli w sesji obecna role (typ) uzytkownika jest pusty, zostanie ustawione guest
  8.        } else {
  9.            $roleName = 'user'; // w przeciwnym wypadku zapisujemy w zmiennej $roleName nasza role (typ) uzytkownika
  10.        }
  11.        
  12.        $acl = Zend_Registry::get('acl');
  13.        $resource = $request->getParam('controller');
  14.        if(!$acl->isAllowed($roleName, $resource)) {
  15.            // cos tam, nie wejdziesz tutaj, bla bla...
  16.            echo 'as';
  17.        }
  18.        
  19.    }
  20. }
  21. ?>

W tym ustawiłem na sztywno w tym IF'ie 'user' == '' oraz $roleName = 'user';.

I to echo 'as'; przy tych parametrach user wyświetla mi tylko w podstronie admin, więc ogólnie to działa. Ale trzeba coś z tymi sesjami zrobić. Prawdopodobnie jest problem z ich wysłaniem.


@edit: poradziłem sobie, dziękuje wszystkim za zainteresowanie.

@edit2: chciałbym się jeszcze dowiedzieć jak zrobić, żeby np. announcements było dostępne dla guest, ale announcements/add już tylko dla user?

Ten post edytował in5ane 9.07.2009, 05:57:21


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
omeck
post 9.07.2009, 12:24:57
Post #37





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Możesz swój kod rozszerzyć w ten sposób (zakładam, że zasoby to nazwy kontrolerów?)
  1. <?php
  2.    public function setPrivilages() {
  3.        $this->acl->allow('guest', 'kontroler1', array('akcja1', 'akcja2'));
  4.        $this->acl->allow('guest', 'kontroler2', array('akcja1'));
  5.        $this->acl->allow('user', 'kontroler1', array('account', 'announcements', 'contact'));
  6.        $this->acl->allow('admin', 'admin');
  7.    }
  8. ?>


Więcej kodu, ale uzyskasz bardziej szczegółowa listę dostępu. Definiuj więc pozwolenia dla jakieś roli i zasobu, a w 3 parametrze podawaj tablicę akcji do których dana rola będzie miała dostęp.

Wówczas musisz jeszcze zmienić plugin... muszę zaraz wychodzić, więc nie mam czasu na wyjaśnienie - zobacz mój, może Cię oświeci ;-) Smacznego!

  1. <?php
  2. /**
  3.  * Plugin kontrolera sprawdzający autoryzację i autentykację
  4.  * @author omeck
  5.  * @version $Id$
  6.  */
  7. class Acl_Plugin extends Zend_Controller_Plugin_Abstract
  8. {
  9.    /**
  10.      * Dostęp do obiektu uwierzytelniania
  11.      * @var Zend_Auth
  12.      */
  13.    protected $_auth = null;
  14.    
  15.    /**
  16.      * Dostęp do ACL
  17.      * @var Zend_Acl
  18.      */
  19.    protected $_acl = null;
  20.  
  21.    public function __construct(Zend_Auth $auth, Zend_Acl $acl)
  22.    {
  23.        $this->_auth = $auth;
  24.        $this->_acl = $acl;
  25.    }
  26.    
  27.    public function preDispatch(Zend_Controller_Request_Abstract $request)
  28.    {
  29.        // sprawdz, czy user jest zalogowany...
  30.        if ($this->_auth->hasIdentity()) {
  31.            // zalogowany, pobierz nazwę roli z obiektu Auth
  32.            $role = $this->_auth->getIdentity()->role;
  33.        } else {
  34.            // niezalogowany, daj mu uprawnienia gościa
  35.            $role = 'guest';
  36.        }
  37.      
  38.        // okreslenie bierzacego modułu
  39.        // będzie to albo null (czyli default), albo admin
  40.        $resource = $request->module;
  41.        
  42.        if ($resource == 'admin') {
  43.            // jesli modulem, do którego użytkownik chce się dostac jest admin,
  44.            // wtedy sprawdzany jest dostęp po module i roli użytkownika,
  45.            // czyli rola i moduł muszą nazwyac się 'admin'
  46.            $resource = 'admin';
  47.            $assert = null;            
  48.        } else {
  49.            // wywołanie na stronie publicznej w module default
  50.            // tutaj sprawdzany jest kontroler i akcja
  51.            $resource = $request->getParam('controller');
  52.            $assert = $request->getParam('action');
  53.        }
  54.        
  55.        // sprawdź dostęp przez ACL
  56.        if (!$this->_acl->isAllowed($role, $resource, $assert)) {
  57.            if ($this->_auth->hasIdentity()) {
  58.                // zalogowany, dostęp zabroniony, przekieruj na index
  59.                $request->setModuleName('default');
  60.                $request->setControllerName('index');
  61.                $request->setActionName('index');
  62.            } else {
  63.                // nie zalogowany, przekieruj do formularza logowania
  64.                $request->setModuleName('default');
  65.                $request->setControllerName('login');
  66.                $request->setActionName('index');
  67.            }
  68.        }
  69.    }
  70. }
  71. ?>


Ten post edytował omeck 9.07.2009, 17:18:28
Go to the top of the page
+Quote Post
in5ane
post 9.07.2009, 23:05:28
Post #38





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Hehe, dzięki. Ale właśnie w tym samym czasie udało mi się to samemu osiągnąć. Ale dzięki za pomoc ;-)


@edit:
Żeby nie tworzyć nowego tematu. Chciałbym się dowiedzieć czy to moje obecne logowanie (kod niżej) jest dobrze napisane i czy nie jest podatne na włamania (w szczególności sql incjection). Z góry dziękuję za zerknięcie w kod.

  1. <?php
  2. function getForm() {
  3.        $form = new Zend_Form();
  4.        $form->setMethod('post');
  5.  
  6.        $login = $form->createElement('text', 'login', array('label' => 'Login'));
  7.        $login->setRequired(true)
  8.                ->addValidator('NotEmpty', true, array('messages' => array('isEmpty' => 'Nie wpisałeś/aś loginu.')))
  9.                ->addDecorators(array(array('HtmlTag', array('class' => 'zf-htmltag')), array('Label', array('class' => 'zf-label')), array('Errors', array('class' => 'zf-errors'))));
  10.  
  11.        $password = $form->createElement('password', 'password', array('label' => 'Hasło'));
  12.        $password->setRequired(true)
  13.                ->addValidator('NotEmpty', true, array('messages' => array('isEmpty' => 'Nie wpisałeś/aś hasła.')))
  14.                ->addDecorators(array(array('Label', array('class' => 'zf-label')), array('HtmlTag', array('class' => 'zf-htmltag')), array('Errors', array('class' => 'zf-errors'))));
  15.  
  16.        $submit = $form->createElement('submit', 'log', array('label' => 'Zaloguj się'));
  17.        $submit->addDecorators(array(array('HtmlTag', array('class' => 'zf-htmltag-submit'))));
  18.  
  19.        $form->addElements(array($login, $password, $submit));
  20.        
  21.        return $form;
  22.    }
  23.    
  24.    function indexAction() {
  25.        $this->view->title = "Twoje konto";
  26.    
  27.        $form = $this->getForm();
  28.    
  29.        if ($this->_request->isPost()) {
  30.            $formData = $this->_request->getPost();
  31.            if ($form->isValid($formData)) {
  32.                $dbAdapter = Zend_Registry::get('dbAdapter');
  33.                $objAuthAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter, 'users', 'login', 'password', 'MD5(?)');
  34.                $objAuthAdapter->setIdentity($this->_getParam('login'))->setCredential($this->_getParam('password'));
  35.                $objAuth = Zend_Auth::getInstance();
  36.                $objResult = $objAuth->authenticate($objAuthAdapter);
  37.                if ($objResult->isValid()) {
  38.                    $data = $objAuthAdapter->getResultRowObject(null, 'password');                    
  39.                    $objAuth->getStorage()->write($data);                    
  40.                    $this->_application->currentRole = Zend_Auth::getInstance()->getIdentity()->role;
  41.                    $this->_redirect('/account');
  42.                } else {
  43.                    $this->view->message = '<p class="zf-errors" style="margin-bottom: 10px;">Błędna nazwa użytkownika, albo hasło.</p>';
  44.                }
  45.            }
  46.        }
  47.        
  48.        $this->view->form = $form;
  49.        $this->view->user = Zend_Auth::getInstance()->getIdentity();
  50.    }
  51.  
  52.    function logoutAction() {
  53.        Zend_Auth::getInstance()->clearIdentity();
  54.        $this->_application->currentRole = 'guest';
  55.        $this->_redirect('/account');
  56.    }
  57. ?>


Ten post edytował in5ane 9.07.2009, 23:06:07


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
omeck
post 10.07.2009, 11:11:53
Post #39





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Raczej jest ok, jeśli sam bezpośrednio nie wywołujesz zapytań z nieprzefiltrowanymi danymi to, klasy z "pakietu" Zend_Db w miarę je filtrują.

BTW
nie byłoby Ci wygodniej (biorąc pod uwagę dalszy rozwój aplikacji przenieść inicjowanie Zend_Auth, adaptera bazy, a formularza do osobnej klasy? Sory, że się czepiam ;-)
Go to the top of the page
+Quote Post
in5ane
post 10.07.2009, 13:23:52
Post #40





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Cytat(omeck @ 10.07.2009, 10:11:53 ) *
Raczej jest ok, jeśli sam bezpośrednio nie wywołujesz zapytań z nieprzefiltrowanymi danymi to, klasy z "pakietu" Zend_Db w miarę je filtrują.

BTW
nie byłoby Ci wygodniej (biorąc pod uwagę dalszy rozwój aplikacji przenieść inicjowanie Zend_Auth, adaptera bazy, a formularza do osobnej klasy? Sory, że się czepiam ;-)


No spoko, że mi podpowiadasz. Adapter bazy już przeniosłem do bootstrapera. Inicjowanie Zend_Auth gdzie przenieść? A formularz, po co do osobnej klasy (nie wiem dlaczego, skoro to jest formularz tylko logowania)?


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post

3 Stron V  < 1 2 3 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 21.05.2024 - 21:29