Seite 1 von 1

Usersettings

Verfasst: 20.09.2009, 13:39:32
von Screeze
Hat zufällig jemand von euch schon ein flexibles modul für userspezifische einstellungen geschrieben?
Wenn ja könntet ihr das ja mal vorstellen, dann spar ich mir ne menge arbeit ;)
Danke ;)

Re: Usersettings

Verfasst: 20.09.2009, 14:18:05
von dr.e.
Hi,

in meinen Projekten habe ich dazu die User-Settings immer zusammen mit den Applikationen gespeichert und diese mit dem User assoziiert. Das ist IMHO die angenehmste Lösung, da das Usermanagement nicht angepasst werden muss.

Re: Usersettings

Verfasst: 21.09.2009, 15:44:29
von Screeze
ich tu mir gradn bisschen schwer, u.a. weil ich bisher wenig vom apf auf datenbanken zugegriffen habe (bzw. garnicht manuell :D), und von caching keine ahnung habe.
Villeicht können wir gemeinsam mal was theoretisch erarbeiten, bevor ich das umsetze.

Also erstmal meine Anforderungen:
Das usermanagement will ich definitiv nicht abändern, das wäre zu viel aufwand.

Was mir allerdings vor augen schwebt wäre ein zentrales Modul, nennen wir es userSettingsManager, kurz uSM. (nicht mit userSessionManager verwechseln, der später auchnoch ins Spiel kommt :D)

Caching wäre an der Stelle angebracht denke ich, denn es handelt sich bei mir um settings die in jedem Request benötigt werden. Da ich aber mit caching bisher nichts zu tun hab kenn ich hier die möglichkeiten nicht. Theoretisch würde es langen, wenn ich die settings in meinen userSESSIONmanager einbaue, und nur bei einem neulogin aus der db hole, sie innerhalb der session aber nur serialisiere&deserialisiere. Aber was passiert dann bei einstellungsänderungen, denn da müsste sich der User immer aus und neu einloggen, was ich wenn möglich umgehen möchte.


dann wäre da aber die Frage, wie lade ich die settings? möglichkeiten die mir spontan einfallen:
1. Übergebe ich einer Funktion den SettingsNamen(=key) und die UserId, bekomme ich den passenden value.
2. Lade ich immer ALLE settings eines users in ein array
3. Erstelle ich eine abhängigkeitslogik, sodass ich ganze settingsPakete zusammenschnüren kann. (wobei das wieder komplexer wird als ich es wollte)

Bei der 1. variante wird das caching schwer, jedenfalls wenn ichs direkt im userSESSIONmanager machen will.
bei der 2. variante wäre das schon einfacher, wäre bei vielen settings aber warscheinlich nicht effektiv (?)
und die 3. variante ist zu komplex, ich hätte gern was möglichst simples :D


Zu was würdet ihr raten?

Danke schonmal,
Screeze

Re: Usersettings

Verfasst: 21.09.2009, 16:18:36
von Megger
Zum Thema Caching und nachladen:
Du brauchst eine Möglichkeit mit dem du den Cache leeren kannst. Sollte der User nun eine Einstellung ändern, schreibst du diese in die Datenbank und leerst den Cache. Beim nächsten Aufruf werden die Daten nun aus der Datenbank geladen und ein neuer Cache erstellt.
1. Übergebe ich einer Funktion den SettingsNamen(=key) und die UserId, bekomme ich den passenden value.
Ist wahrscheinlich die einfachste Möglichkeit. Auch hier ist Caching möglich, da du ja die Daten im Hintergrund in deinem SessionManager haben kannst, sodass du nicht auf die Datenbank zugreifen musst (Damit arbeite ich bei meiner Navigation, der komplett generierte Navigationsbaum wird in einer Session hinterlegt und ist $__TTL lang gültig [3600 = 1 Stunde, auf dem Entwicklungssystem aber nur 1 Sekunde :D])

Das ganze könntest du mit deiner zwieten Version verbinden, sodass du beim ersten Aufruf die Daten komplett ließt und diese zwischenspeicherst und daraus die aktuellen Einzelwerte dann ausließt.

Zur Version 3:
Hier könntest du dich ja am Permission/Role/Group System des APFs orientieren. Ich denke auch damit ließen sich Einstellungen speichern. Ein Modul welches das ganze zusammenfasst und vielleicht auch noch die Administration zulässt und fertig ist das Paket :D

Re: Usersettings

Verfasst: 21.09.2009, 16:25:23
von Screeze

Code: Alles auswählen

Zur Version 3:
Hier könntest du dich ja am Permission/Role/Group System des APFs orientieren. Ich denke auch damit ließen sich Einstellungen speichern. Ein Modul welches das ganze zusammenfasst und vielleicht auch noch die Administration zulässt und fertig ist das Paket :D
Daran hab ich zwar auch schon gedacht, aber wie gesagt, so komplex wollt ichs nicht machen :D

Re: Usersettings

Verfasst: 21.09.2009, 16:27:22
von Megger
Also ich persönlich würde Version 1 und 2 kombinieren.

Sobald der User sich einloggt, holst du die ganzen Einstellungen und legst sie in die Session. Dann kannst du einzeln darauf zugreifen.

Ich würde allerdings darauf achten, dass die Einstellungen auch ohne deinen eigenen SessionManager funktionieren. Dadurch bist du bei Änderungen flexibler.

Re: Usersettings

Verfasst: 21.09.2009, 16:53:27
von Screeze
naja der settingsManager würde jeweils eine funktion zum laden von allen sätzen und zum laden von einem satz bereitstellen.
Ich würde den sessionManager lediglich um eine variable erweitern , und beim laden des benutzers auch auf den settingsmanager zugreifen und die settings in die neue variable laden.
dann noch dem sessionManager eine funktion zum abrufen von einer setting aus der session geben, und eine zum löschen... so sollte das klappen oder?

Re: Usersettings

Verfasst: 21.09.2009, 16:56:54
von Megger
Du brauchst unbedingt andere Namen settingManager sessionManager, wer soll denn da noch durchblicken :D

Klappen sollte das natürlich, nur dass du dadurch Abhängigkeiten schaffst, ist aber im Endeffekt deine Entscheidung :P

Re: Usersettings

Verfasst: 21.09.2009, 17:06:51
von Screeze
naja, ich werde sowieso eine config datei im sessionManager noch einbauen, und dort wird auch wählbar sein ob der settingsManager benutzt werden soll oder nicht.

andere Namen... das sind aber die treffendsten :D ich könnte auch wieder mit meinen screezeXX namen anfangen, z.b. screezeSettings :D aber wenn ich das dann abkürzen will hört das BKA mit ;)

Re: Usersettings

Verfasst: 21.09.2009, 17:11:59
von Megger
War auch nur ein Scherz mit den Namen. Bin sehr gespannt auf deine Umsetzung :D