neaktuální role uživatele

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
illi
Člen | 1
+
0
-

Zdravím,
narazil jsem na zajímavou věc. Pokud se uživatel přihlásí, tak se mu uloží jeho role a pak až do odhlášení je má nastavené. Takže pokud mu je změním například v databázi, tak se to projeví až po odhlášení.

Nevíte prosím jestli toto je požadované chování nebo někde dělám chybu a nemělo by to takto fungovat?
Případně jestli se to dá nějak obejít.

Děkuji

studna
Člen | 181
+
0
-

Není to chyba, funguje to správně. Aby ses nemusel odhlásit a znova přihlásit, tak musíš přepsat hodnoty v $user->identity.

Filip Procházka
Moderator | 4668
+
0
-

Tento „problém“ se obecně dá řešit tak, že si uděláš tabulku přihlášených uživatelů a budeš tam mít jejich session_id, user_id a čas vytvoření záznamu (přihlášení).

Velice jednoduchým dotazem

$fresh = dibi::select('1')->from('users_loggin_fresh')
	->where('user_id = %i', $this->getUser()->identity->id)
		->and('session_id = %s', $this->getSession()->getId())
	->fetch();

pak zjistíš, jestli je jeho session v systému platná.

Nevýhody

  • 1 SQL navíc při každém requestu pro každého uživatele, kterému mělo předcházet uložení uživatelských dat do session

Výhody

  • dotaz je extrémně rychlý, pokud si nad user_id a session_id uděláš index
  • můžeš systém donutit znovu-načíst uživatelská data a ovlivňovat tak jeho session
  • můžeš uživatele kompletně odhlásit (například když ho zabanuješ, nemusíš čekat až se odhlásí:)

Editoval HosipLan (18. 9. 2011 7:52)