Přidání dalších dat do Nette\Security\Identity

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

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(.....);
  1. proběhne ověření, zda user aktivní, zda má platnou licenci apod…
  2. 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
+
+1
-

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
+
0
-

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
+
+2
-

Ten treti parametr akceptuje pole – takze proste pro admina vyber dalsi data a array_merge…

n.u.r.v.
Člen | 485
+
0
-

array_merge nefunguje – s resultSet nejde…

edit: sorry, jde- stačí přetypovat…uff – vyřešeno, díky

Editoval n.u.r.v. (8. 8. 2014 13:56)

David Matějka
Moderator | 6445
+
0
-

iterator_to_array ?

Šaman
Člen | 2659
+
0
-

Aha, tak to už není ale dotaz na Identitu, ale na to, jak z $row vytvořit pole. Jestli nefunguje přetypování na pole, nebo metoda ->toArray(), tak ti nepomohu. NDb nepoužívám. IMHO ->toArray() by ale fungovat mělo.