Přidání dalších dat do Nette\Security\Identity
- n.u.r.v.
- Člen | 485
Ahoj, řeším tento problém s přihlášením:
1)v Authenticatoru si z DB načtu data – např:
$row = $this->db->query(.....);
- proběhne ověření, zda user aktivní, zda má platnou licenci apod…
- vrátím return new Nette\Security\Identity($row[‚USER_ID‘], $row[‚USER_TYPE‘], $row);
Toto je ok, ale teď mám tento problém – v bodu 2 zjistím, že user je typu Admin, takže bych si potřeboval z DB načíst další údaje a přidat je k původnímu $row a to celé dát do Identity… Jak na to? Díky.
- Šaman
- Člen | 2659
Ten třetí parametr nemusí být row, ale pole. Takže si poskládej jaké chceš informace a předej je v poli jako třetí parametr.
P.S. Jediné, co se tam dát nesmí, jsou neserializovatelné objekty. Což jsou často ORM entity. Je to proto, že celá identita se ukládá do session a prostě některé objekty se tomu brání.
P.P.S. Ale zrovna informace, že je to admin, by se měla předat jako druhý parametr, což je pole jeho rolí (user, admin, guest, nebo jakékoliv vlastní).
Editoval Šaman (8. 8. 2014 10:33)
- n.u.r.v.
- Člen | 485
Ad p.p.s: ano, jako druhý parametr dávám roli – tedy že je admin..
Jde o to, že admin potřebuje v session držet dalších asi 9 položek a ostatní uživatelé toto nepotřebují. Takže teď to mám tak, že při loginu natahuju z db vše a pokud zjistím, že user je admin, tak vrácený DB řádek projedu přes metodu, která mi unset-uje nepotřebná data.
Ten třetí parametr nemusí být row, ale pole. Takže si poskládej jaké chceš informace a předej je v poli jako třetí parametr.
No, to je ten problém – jak složit jeden resultset s druhým do jednoho…
prostě potřebuji něco takového:
$row1 = $this->db->query()->fetch();
$row2 = $this->db->query()->fetch();
$rowAll = $row1+$row2;
return new Nette\Security\Identity($rowAll[‚USER_ID‘], $rowAll[‚USER_TYPE‘], $rowAll);
Editoval n.u.r.v. (8. 8. 2014 13:51)
- David Matějka
- Moderator | 6445
Ten treti parametr akceptuje pole – takze proste pro admina vyber dalsi data a array_merge…