Zivjo,
imam naslednji problemcek. Rad bi kreiral bazo uporabnikov, kjer bi
uporabniki lahko nastopali kot predstavniki podjetja. Prva ideja,
ki mi pade v glavo je, da se znebim coupling podjetja in
uporabnika:
// narobe
class Company
class User
Company company_;
in namesto tega uvedem vlogo uporabnika.
// prav
class Company
class User
class Role
class SalesPerson : public Role
Company company_;
User user_;
problem pa se pojavi, ker imajo vloge razlicne parametre in jih
zato ne morem narediti genericnih v stilu: vsaka vloga naj ima
metodo Authorize, ki ji dam uporabnika in podjetje in vrne true
ali false. Po domace povedano, bi morala imeti ta metoda
(Authorize) razlicne parametre. Npr. ce si zelim vpeljati vlogo
class ImpersonateUser : public Role
User user_, impersonatedUser_;
kjer lahko en uporabnik nastopa v vlogi drugega, potem moram
za to vlogo uporabiti Authorize(user1, user2) in ne Authorize (user,
company), kot za vlogo SalesPerson.
Razmisljal sem, da bi morda veljalo vtakniti parametre vloge v
svoj razred in nato ta razred podtakniti metodi Authorize(roleparamobject),
za parametre pa bi obstajal factory, ki bi jih kreiral. Tako bi bilo
dodajanje
novih vlog centralizirano, factory bi generiral parametre, obstajal bi
polimorfni CreateInstance in od tam naprej bi bil dostop do parametrov
vloge enak.
Tu se pojavi se en problem. Namrec, vcasih zelim dobiti spisek vseh vlog
uporabnika (User roles), drugic spet pa si zelim dobiti spisek vseh,
ki igrajo doloceno vlogo (npr. vseh, ki so naroceni na mailing listo in
torej igrajo vlogo narocnika mailing liste)?
Kaksne ideje glede cimbolj genericnega modela?
Kaksne ideje glede persistentnosti (kako te zadeve potem elegantno
posneti na disk)?
---------------------------------------------------------------
Tomaz Stih, B.Sc. SE +386/61 133 92 02
---------------------------------------------------------------
Gwindle Mission Critical Systems d.o.o. Tel.+386/61 133 92 02
Prekmurska 6 Fax.+386/61 133 92 02
1000 Ljubljana / Slovenia Mob.+386/31 889 78 4
Europe http://www.gwindle.com
---------------------------------------------------------------