Potomer Nette\Security\User – Best Practice
- semtex.989
- Člen | 75
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
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:
- Vytvorit si vlastnu implementaciu
IIdentity
, ktore bude predstavovat gro uzivatela. Vsetky jeho zhmotnene role, by pritom mohli byt akoprototypes
. Tzn mal by si obecnu identitu s Id, user name, heslom a ACL a v nej poleprototypes
a potom nieco ako metodugetPrototype('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 - 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.
- Samozrejme nezabudni dane triedy nastavit v configu
Tolko moj nazor ;)