Potomer Nette\Security\User – Best Practice

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

Přemýšlím jak napsat Model Customer, zákazník, který má adresu, statistiky, atd.

Zkoušel jsem vytvořit potomka třídy User, ale nedává to dobrý smysl, protože zapouzdřuje autenfitikaci atd., takže když chci načíst jiného než přihlášeného zákazníka, metoda isAuthenticated() vrací true všem – protože je v session.
Navíc z logiky věci je uživatel jen jeden, ale pokud chci procházet zákazníky v databázi, logicky je jich víc.

Vytvořit potomka Identity má také úskalí, protože identita je ukládána do session, což má limity.

Nakonec vytvořit samotnou třídu je nejlepší, ale zase se musí pracovat se dvěma třídami – User a Customer.

Žádné řešení se mi nelíbí, proto mě zajímá, jak by to napsali jiní. Nic podobného jsem zatím na fóru nenašel…

westrem
Člen | 398
+
0
-

Ha, nikdy som si plne neuvedomil, ze do session ide cela IIdentity a to som si ten zdrojak prechadzal viac krat pri studiu Nette, stava sa :).

Ale naspet k problemu. Ak spravne chapem chces vytvorit model, ktory bude umoznovat narabanie s uzivatelmi – zakaznikmi jednak na urovni Entit ale zaroven aj na urovni autentifikacie a autorizacie v systeme ano?

Napada ma jedno zaujimave riesenie:

  1. Vytvorit si vlastnu implementaciu IIdentity, ktore bude predstavovat gro uzivatela. Vsetky jeho zhmotnene role, by pritom mohli byt ako prototypes. Tzn mal by si obecnu identitu s Id, user name, heslom a ACL a v nej pole prototypes a potom nieco ako metodu getPrototype('customer'), ktora by ti vratila bud to pole reprezentujuce zakaznicke veci k danemu uzivatelovy alebo kludne nejaku pseudo entitu. – tzn. teoreticky povedane, vyuzivas navrhovy vzor Dekorator
  2. Spravis si vlastnu implementaciu triedy User – kludne takmer plne totoznu s tou v Nette, jedine co by si upravil by bolo uchovavanie entity, tzn uchovavlo by sa iba to co teraz a prototypy nie, tie by si kludne mohol loadovat lazy sposobom len vtedy kedy ich potrebujes.
  3. Samozrejme nezabudni dane triedy nastavit v configu

Tolko moj nazor ;)