Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] sfGuard
Forum PHP.pl > Forum > PHP > Frameworki
AxZx
witam,

chciałbym skorzystać z pluginu sfGuard i w związku z tym mam pytanie.
jak zintegrować go z profilami użytkowników w moim serwisie?
załóżmy jest tabela profils z kolumnami imie, nazwisko, email, miejscowosc ...

chciałbym żeby akcja logowania sprawdzała uprawnienia (tabele sf_guard_gruop, sf_guard_permissions, etc) ale też żeby był sprawdzany status profilu - tzn żeby była wykonywana logika, która ja chcę już wprowadzić (sprawdzanie statusu czy aktywny, zapisanie aktywnosci, daty ostatniego logowania).

jak to wszystko razem połączyć?
destroyerr
Wystarczyło zajrzeć w kod pluginu, a wszystko stałoby sie jasne.
Jak połączyć z profilem jest opisane w dokumentacji pluginu.
Podczas logowania jest sprawdzany status konta - to znaczy pobiera z bazy tylko aktywnego użytkownika, jest zapisywana data logowania. Jeśli jednak chcesz coś jeszcze mieć podczas logowania, to nadpisz metode signIn w klasie usera.
AxZx
zajrzałem.
tylko nie wiem do końca jak mam zmodyfikować teraz tabelę profil.
czy tak:
1) profil: idprofil, user_id, imie, nazwisko, miejscowosc

czy może tak:
2) profil: idprofil, imie, nazwisko, miejscowosc

a w ustawieniach podać
Kod
all:
  sf_guard_plugin:
    profile_class:      Profil
    profile_field_name: idprofil

?

w tym drugim przypadku kolumna idprofil nie może być autoincrement. byłyby tam zapisywane ID pobierane z tabeli sf_guard_user, kolumna id.
destroyerr
Oczywiście pierwsza wersja, ale profile_field_name ma mieć nazwę kolumny w Profilu, która stanowi klucz obcy do sfGuardUser.
AxZx
no ale po co 2 klucze?

w tabeli profil
Kod
idprofil: { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true, onDelete: cascade }

i
Kod
all:
  sf_guard_plugin:
    profile_class:      Profil
    profile_field_name: idprofil


nie może tak być?
hmm, pewnie mogłoby się coś pomieszać... ale ja właśnie się obawiam, że dwa ID wprowadzą zamieszanie.



EDIT
zrobiłem tak jak radzisz.

tylko jedno mnie irytuje.
teraz jest wykonywane zapytanie, które pobiera usera z bazy sprawdzając czy jest taki. robi to w metodzie getGuardUser.
musiałem ją nadpisać bo nie było tam sprawdzania is_active.

no i przydałoby się jeszcze pobrac dane z tabeli profil.
jest metoda getProfil. ale wykonywane jest wtedy drugie zapytanie.
staram się to jakoś połączyć, ale musiałbym model chyba nadpisać.
  1. <?php
  2. public function getGuardUser()
  3.    {              
  4.        if (!$this->user && $id = $this->getAttribute('user_id', null, 'sfGuardSecurityUser'))
  5.        {
  6.            $c = new Criteria();
  7.            $c->add(sfGuardUserPeer::IS_ACTIVE, true);
  8.            $c->add(sfGuardUserPeer::ID, $id);            
  9.            $this->user = sfGuardUserPeer::doSelectOne($c);
  10.            
  11.            if ( ! $this->user)
  12.            {
  13.                    // the user does not exist anymore in the database
  14.                $this->signOut();
  15.                
  16.                $this->setFlash('msg', 'Konto zostało zablokowane lub usunięte. W razie wątpliwości prosimy o kontakt z administratorem.');
  17.                //redirect to homepage
  18.            }
  19.        }
  20.        
  21.        return $this->user;
  22.    }
  23. ?>

tak wygląda metoda getUser.

jakieś pomysły jak to inaczej rozwiązać niż modyfikować model?
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.