Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana] Auth i logowanie się z uprawieniami
Forum PHP.pl > Forum > PHP > Frameworki
szczurek
Witam,
właśnie usiadłem do Kohany no i mam pierwszy problem z modułem autoryzacji.

Napisałem prosty kod który dodaje użytkownika do bazy:

  1. <?php
  2. public function dodaj()
  3.    {
  4.        $user=ORM::factory('user',1);
  5.        foreach($_POST as $key=>$val)
  6.        {
  7.            $user->$key=$val;
  8.        }
  9.        
  10.        if($user->add(ORM::factory('role', 'admin')) && $user->save())
  11.        {
  12.            Auth::instance()->login($_POST['username'], $_POST['password']);
  13.            //przzekierowanie
  14.            url::redirect(url::base().'index.php/uzytkownik');
  15.        }
  16. ?>


w tabeli z rolami są dwie login z id 1 i admin z id 2

Użytkownik dodany jako admin nie może się zalogować.

Dokładniej wywołanie tej metody
  1. <?php
  2. public function zaloguj()
  3.    {
  4.        $user=ORM::factory('user', $this->a_post['username']);
  5.        if(!$user->loaded)
  6.        {
  7.            $this->a_Bledy['uzytkownik']="Podany login nie istnieje.";
  8.        }
  9.        elseif($this->o_Autoryzacja->login($user, $this->a_post['password']))
  10.        {
  11.            if($this->o_Sesja->get_once('adres_przekierowania')<>"")
  12.            {
  13.                url::redirect($this->o_Sesja->get_once('adres_przekierowania'));
  14.            }
  15.            else
  16.            {
  17.                url::redirect(url::base());
  18.            }
  19.        }
  20.        else
  21.        {
  22.            $this->a_Bledy['haslo']="Podane hasło jest nieprawidłowe";
  23.            
  24.        }
  25.        
  26.        $this->index();
  27.    }
  28. ?>

kończy się błędem hasła czyli występuje ostatnie else. Kiedy zmienię w tabeli roles_users przypisanie roli z użytkownika admin na login czyli z id 2 na id 1 ten sam użytkownik z tym samym hasłem bez problemu się loguję. Nie wiem na czym polega mój błąd.

Może ktoś ma pomysł. Korzystam z Kohana 2.3.4 a to autoryzacji oczywiście moduł Auth korzystający z ORM.


Pozdrawiam
k_@_m_i_l
Twój problem polega na tym,że jeśli masz użytkownika o uprawnieniach admin,to musisz dodać wiersz do tabeli roles_user(chyba tak ona sie nazywa,ale bedziesz wiedział o co chodzi) dla tego użytkownika jeszcze role login.Czyli taki user musi mieć zarówno role 1 jak i role 2 i wtedy masz admina.

Też z tym miałem problem,ale udało się rozwiązać to winksmiley.jpg
JoShiMa
A może lepiej zainteresuj się modułem Simple_Auth. Bardzo przyjemny i łatwy w użyciu.
skowron-line
Włącz sobie profilera i zobacz co do bazy leci na tej podstawie będzie Ci łatwiej namierzyć błąd.
Oczywiście zgadzam się z kolega nademną że Simple_Auth to dużo fajniejsza sprawa

Polecam również lekturkę
http://thejw23.blogspot.com/2009/04/simple...-przyklady.html Tu kolega swietnie opisuje co w swiecie Kohany piszczy.
szczurek
Dzięki za odpowiedzi,

co do Simple Auth to powiem szczerze, że przekonał mnie tak sobie, bo go próbowałem na początku.

A co do profilera no to rozjaśniło mi to dlaczego nie loguje, ale nadal nie wiem jak to zmienić.

W jednym z zapytań pobiera id roli "login" no a później pewnie porównuje sobie czy user do niej należy a jak nie należy to mówi, że wypad.

Ale to dziwne, nigdzie nie ustawiałem żeby logował tylko z rolą id 1. Chciałem zrobić ograniczenia modułów dla różnych ról. Idę szukać dalej. A jeśli ktoś ma pomysł dlaczego porównuje tylko z rolą która ma ID 1 bazie? Niby to pownien być admin. Ale logować przecież powinno się na każdą istniejącoą rolę.
skowron-line
http://thejw23.blogspot.com/2009/04/simple...-przyklady.html
http://thejw23.blogspot.com/2009/07/simple-auth-porady.html

Poczytaj to artykuly o Simple Auth od samego autora klasy.
szczurek
Z tego co zrozumiałem z artykułu mam tylko 3 role. A jak zmodyfikuję tabele to pewnie jeszcze dalej będę musiał grzebać. Nie ukrywam, że ilość ról w systemie będzie zdecydowanie większa niż 3 i chciałbym aby ich dodawanie nie było związane ze zmianą struktury bazy danych.
JoShiMa
Autor Simple_Auth wypuścił wersję betha z dynamicznym dodawaniem ról: http://forum.kohanaphp.pl/index.php/topic,697.0.html
szczurek
Widzę, że sami zwolennicy Simple_Auth. Który nie do końca wydaje mi się simple.

Problem rozwiązałem. Polegał on na tym, że w driverze Auth przy logowaniu była "z palca" wpisana rola login i trzeba było się tego pozbyć.

Aktualnie zastanawiam się jak za pomocą ORM dodać kilka wierszy naraz. Chodzi o przypisanie użytkownikowi kilku ról naraz przy jego tworzeniu.

Pozdrawiam
bełdzio
dodanie roli korzystając z ORM:

  1. <?php
  2. $user = new User_Model( 1 );
  3. $user -> add( ORM :: factory( 'role', nazwa_roli ) );
  4. $user -> save( );
  5. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.