Login eines Benutzers mit dem Usermanagement Modul

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Login eines Benutzers mit dem Usermanagement Modul

Beitrag von Megger » 01.07.2009, 09:17:24

Hi

Ich frage mich, ob mir das Usermanagement Modul sagen kann, ob ein Benutzer eingeloggt ist oder ob ich mich um diese Funktionalität selber kümmern muss. Soweit ich das Usermanagment Modul durchschaut habe ist dies nicht möglich, aber vielleicht habe ich ja irgendetwas übersehen.

Wäre vielleicht eine sinnvolle Erweiterung für das Usermanagement.

Gruß
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von dr.e. » 01.07.2009, 12:15:55

Hi,

das Thema Login ist nicht Teil des usermanagement-Moduls, darum muss sich der Entwickler selbst kümmern. Ich gebe dir jedoch Recht, eine sinnvolle Erweiterung ist das schon. Die Frage ist hierbei nur: welche Anforderungen soll es erfüllen?

Meine Ansicht nach sind das folgende:
  • Anpassbares Layout
  • Authentifizierung über Front-Controller
  • Konfigurierbare Datenquelle
  • Konfigurierbares Lazy-Loading (sprich was soll von meinem Benutzer in eine Session gelegt werden)
Ergänzungen / Ideen?

Viele Grüße,
Christian
Viele Grüße,
Christian

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von Megger » 01.07.2009, 12:54:11

Das hört sich schon sehr gut an
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von dr.e. » 01.07.2009, 15:16:59

Hallo,

ok, dann mache ich einen Vorschlag für Release 1.11.

Viele Grüße,
Christian
Viele Grüße,
Christian

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von Megger » 01.07.2009, 15:49:45

Ich habe bei mir jetzt Daten in das ApplicationModel und in die Session (mittels SessionManager) geschrieben. Die Daten von beiden vergleiche ich dann immer. Kann man so vorgehen oder gibt es eine bessere Möglichkeit?
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von dr.e. » 01.07.2009, 20:23:08

Hallo Megger,
Ich habe bei mir jetzt Daten in das ApplicationModel und in die Session (mittels SessionManager) geschrieben. Die Daten von beiden vergleiche ich dann immer. Kann man so vorgehen oder gibt es eine bessere Möglichkeit?
Das kannst du so umsetzen. Nachteil ist jedoch, dass die Daten "manuell" abgeglichen werden müssen.

Meiner Meinung nach sollte das Thema Authentifikation in einer Applikation zentral abgehandelt werden. Die notwendigen Informationen können in einem zentralen Applikations-Model abgelegt werden. Die Arbeit selbst kannst du durch eine Front-Controller-Action erledigen lassen oder an einen Document-Controller delegieren. Wichtig ist nur, dass alle Elemente deiner Software auf das gleiche Model zugreifen um nicht mehrmals oder an mehreren Stellen prüfen zu müssen, ob ein Benutzer eingeloggt ist.

Viele Grüße,
Christian
Viele Grüße,
Christian

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von Megger » 02.07.2009, 08:54:53

Also das Apllikation Model ist zentral verfügbar und der Abgleich zwischen Session und dem Model geschieht in einer permanenten Action, diese setzt dann eine Variable im Model auf true oder false.
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von dr.e. » 02.07.2009, 11:56:58

Hi,

das klingt für mich vernünftig. :)

Christian
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von MrNiceGuy » 02.07.2009, 21:23:16

Neben dem Login als fester Bestandteil des APF wäre vielleicht auch eine Registrierung sinnvoll!?

Oder - wenn das zu aufwendig sein sollte wegen eventueller Probleme mit der Kofniguration (welche Felder sollen angegeben werden, welche davon sollen Pflichtfelder sein, etc.), wäre zumindest eine Erweiterung des UMGT toll, bei der die Abfrage von Benutzernamen und eMail geregelt wird, um zu verhindern, dass ein Benutzername oder eine eMail-Adresse doppelt verwendet wird...

Mir schwebt da eine Erweiterung der Klasse umgtManager vor:

function checkUsername ($stringUsername)
{
// Prüfen, ob der Benutzername bereits existiert
// return TRUE|FALSE;
}
function checkEmail ($stringEmail)
{
// Prüfen, ob die Email-Adresse bereits existiert
// return TRUE|FALSE;
}
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von Megger » 02.07.2009, 21:32:07

Dafür verwende ich die neuen Funktionen

loadUserByUsername

loadUserByEMail

Wenn da nicht null rauskommt, dann ist der Username bzw. die EMail-Adresse bereits vergeben
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von MrNiceGuy » 02.07.2009, 21:43:59

Hmm... OK, das würde mir auch reichen, scheinbar habe ich noch nicht die aktuellste Version auf meinem Entwicklungs-Server, sodass ich nicht wusste, dass es diese gibt. Dann hat sich das ja erledigt *freu* :)
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von Well » 27.02.2010, 13:18:52

Wäre es also weniger Sinnvoll, das umgt Modul um die Methoden
-> loginSessionUser($userId)
-> logoutSessionUser()
-> getLoggedInSessionUser()
zu erweitern (quasi durch Vererbung)? (Sodass dann das Modul selber die Session des eingeloggen Benutzers verwaltet?)

Hoffe doch die Frage passt zu dem Thema.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von dr.e. » 27.02.2010, 13:25:24

Hallo Well,

korrekt. Das sollte durch eine andere Komponente - beispielsweise eine Action deiner konkreten Applikation - abgebildet werden, die den umgtManager nutzt (delegate pattern). Grund ist einerseits, dass der umgtManager die Struktur deiner Applikation nicht kennt (Struktur der Session etc.) und eine derartige Integration die Komponente abhängig von der Session macht, was man für eine Business-Komponente im Allgemeinen nicht will. Diese steckt in der Business-Schicht und soll dort auch bleiben. Sessions sind im Allgemeinen ein Konstrukt der Präsentations-Schicht einer Applikation nach Aussen.

Nutzt du eine Session in einer Front-Controller-Action, ist das zwar ein Quasi-Bruch dies Philosophie, aber es wird dieser trotzdem dadurch gerecht, dass eine Business-Komponente damit nicht direkt in Berührung kommt.

Für deinen konkreten Anwendungsfall empfehle ich daher eine Komponente zu schaffen, die die Session-Informationen ausliest und an den umgtManager oder gar deine Applikation direkt (Model!) weiterreicht. So schaffst du eine saubere Entkopplung und kannst die Komponente (hier der umgtManager, vielleicht in deiner Applikation eine andere) auch wiederverwenden.
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von Well » 27.02.2010, 13:42:20

Für deinen konkreten Anwendungsfall empfehle ich daher eine Komponente zu schaffen, die die Session-Informationen ausliest und an den umgtManager oder gar deine Applikation direkt (Model!) weiterreicht. So schaffst du eine saubere Entkopplung und kannst die Komponente (hier der umgtManager, vielleicht in deiner Applikation eine andere) auch wiederverwenden.
Uam... Da habe ich nun Verständlichkeitsprobleme. Was für einen Komponenten sollte ich dazu dann implentieren? (bzw. von welcher Schicht?)

Wie wäre die Lösung, für die Applikation einen eigenen Manager abzuleiten und dort dann die Session-Methoden zu implentieren? (Also class session_umgtManager extends umgtManager in sites::[...]::biz?)
Wäre das dann auch schlecht, da so noch immer ein Business Komponent von dem SessionManager abhängig ist?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Login eines Benutzers mit dem Usermanagement Modul

Beitrag von dr.e. » 27.02.2010, 14:00:26

Hallo Well,

die Idee geh schon in die richtige Richtung, nur würde ich das nicht mit Vererbung lösen. Vererbung erzeugt eine zu starke Abhängigkeit. Ich würde in der Business-Komponente deiner Anwendung einfach den umgtManager nutzen. Konkreter Anwendungsfall ist dort sicher, die Permissions oder Gruppen eines Benutzers zu laden. Das kannst du dann wie folgt machen:

Code: Alles auswählen

class ApplicationBusinessComponent {

   public function getLoggedInUserGroup(){
      $sM = $this->getSessionManager();
      $userId = $sM->loadSessionData('userid');

      $umgt = &$this->getUmgtManager();
      $user = $umgt->loadUserByID($userId);
      return $umgt->loadGroupsWithUser($user);
   }

   private function getSessionManager(){
      return new SessionManager('ApplicationBusinessComponent');
   }

   private function &getUmgtManager(){
      return $this->__getAndInitServiceObject('modules::usermanagement::biz','umgtManager','Default');
   }
}
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste