Einfache Abfrage der Benutzer-ID

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Einfache Abfrage der Benutzer-ID

Beitrag von ma2604121 » 20.08.2011, 19:37:06

Hallo,

ich suche eine Möglichkeit die Benutzer-ID des gerade angemeldeten Benutzers auszulesen. Wenn man den UserManager verwendet findet sich diese in der Tabelle ent_user als UserID.

Gibt es hierzu eine einfache Möglichkeit, diese ID beliebig abzufragen? In der Doku habe ich bislang nichts gefunden.

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Einfache Abfrage der Benutzer-ID

Beitrag von Screeze » 20.08.2011, 19:39:48

Wenn du den Login vom APF verwendest, kannst du eine Instanz des UmgtUserSessionStore laden, und ein ->getUser($appKey) darauf anwenden, dann hast du das User Objekt, und kannst wie gewohnt mit ->getObjectId() die Id abfragen.

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Einfache Abfrage der Benutzer-ID

Beitrag von ma2604121 » 20.08.2011, 19:51:21

Code: Alles auswählen

$uM = Singleton::getInstance('UmgtUserSessionStore');
$user = $uM->getUser('Default'); 
Wenn ich mir nun $user ausgeben lasse, enthält dies keinerlei Daten, auf die ich mittels ->getObjectId() zugreifen könnte.

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Einfache Abfrage der Benutzer-ID

Beitrag von Screeze » 20.08.2011, 23:16:14

Wie auch, wenn du es als Singleton aufrufst kann es keine Daten aus der Session beinhalten, wenn dann muss es schon ein SessionSingleton sein, schau dir am besten mal an wie das beim Login aufgerufen wird.

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Einfache Abfrage der Benutzer-ID

Beitrag von ma2604121 » 21.08.2011, 12:53:02

Da hast Du natürlich Recht.

Inzwischen funktioniert es. Teilweise...

Wenn ich das in einer Methode implementiere z.B.:

Code: Alles auswählen

public function leseDaten(){
    $uM = SessionSingleton::getInstance('UmgtUserSessionStore');
    $appIdent = $this->getApplicationIdentifier();
    $user = $uM->getUser($appIdent);
    $id = $user->getObjectId();
}

private function getApplicationIdentifier() {
    return $this->getAttribute('app-ident', $this->getContext());
} 
Dann geht es.

Nutze ich es in der selben Klasse nochmals in einer anderen Methode in exakt der gleichen Art und Weise, erhalte ich folgenden Fehler:
Fatal error: TestMapper::deleteData(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "UmgtUserSessionStore" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /var/www/alpha/apps/rl/data/TestMapper.php on line 111
Da ist mir noch nicht ganz klar, wieso es dann zu einer Fehlermeldung kommt?

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Einfache Abfrage der Benutzer-ID

Beitrag von Screeze » 21.08.2011, 13:02:44

Die Klassendefinition ist noch nicht vorhanden, weshalb er das Objekt nicht aus der Session wiederherstellen kann.
Befindest du dich in einem ApfObject? Wenn ja, nutze besser die Methode $this->getServiceObject() um den Store zu laden. Wenn nicht, nutze den ServiceManager, wie es in der genannten Methode gemacht wird. Solltest du sowieso tun, weil sonst dein Context verloren geht.

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Einfache Abfrage der Benutzer-ID

Beitrag von ma2604121 » 21.08.2011, 14:22:09

Ja, das ist in einem APFObject.

Mittels ->getServiceObject() dürfte wie folgt aussehen:

Code: Alles auswählen

$daten = &$this->getServiceObject('modules::usermanagement::biz', 'UmgtUserSessionStore', 'SESSIONSINGLETON'); 
Zumindest produziert es auf diese Art und Weise keine Fehlermeldung. ;)

Aber ich stehe nach wie vor auf dem Schlauch, wie ich da vorgehen soll, um von überall und jederzeit an die ID des Benutzers zu kommen. Irgendwie stehe ich mit OOP auf Kriegsfuß... :cry:

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Einfache Abfrage der Benutzer-ID

Beitrag von Screeze » 21.08.2011, 14:59:46

Überall wo du die ID brauchst:

Code: Alles auswählen

$uM = $this->getServiceObject('modules::usermanagement::biz', 'UmgtUserSessionStore', 'SESSIONSINGLETON'); 
$appIdent = $this->getApplicationIdentifier();
$user = $uM->getUser($appIdent);

$id = $user->getObjectId();
 

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Einfache Abfrage der Benutzer-ID

Beitrag von ma2604121 » 21.08.2011, 19:19:26

Auf die Art hatte ich es bereits probiert, aber leider funktioniert es so nicht:
Fatal error: TrailsMapper::checkTrail(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "GenericDomainObject" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /var/www/alpha/apps/rl/data/TrailsMapper.php on line 85
Der fragliche Code:

Code: Alles auswählen

81    $uM = $this->getServiceObject('modules::usermanagement::biz', 'UmgtUserSessionStore', 'SESSIONSINGLETON');
82    $appIdent = $this->getApplicationIdentifier();
83    $user = $uM->getUser($appIdent);
84
85    $id = $user->getObjectId(); 


Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Einfache Abfrage der Benutzer-ID

Beitrag von ma2604121 » 21.08.2011, 20:27:48

Den habe ich nun eingefügt. Dafür ändert sich der Fehler zu

Code: Alles auswählen

Fatal error: Call to a member function getObjectId() on a non-object in /var/www/alpha/apps/rl/data/TrailsMapper.php on line 85 
var_dump($user) liefert NULL.

var_dump($uM):

Code: Alles auswählen

object(UmgtUserSessionStore)#146 (5) {
  ["store":"UmgtUserSessionStore":private]=>
  NULL
  ["__Attributes":protected]=>
  array(0) {
  }
  ["__Context":protected]=>
  string(2) "rl"
  ["__Language":protected]=>
  string(2) "de"
  ["__ServiceType":protected]=>
  string(16) "SESSIONSINGLETON"
}


Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Einfache Abfrage der Benutzer-ID

Beitrag von ma2604121 » 21.08.2011, 22:40:52

Schön wäre es...

Wäre ich nicht eingeloggt, würde ich gar nicht zu den Erfassungsmasken kommen. Da ich diese und entsprechende Menüs sehe, muss ich folglich eingeloggt sein.

Wobei Du grundsätzlich Recht hast: Wenn ich nicht angemeldet wäre, würde diese Meldung erscheinen.


Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Einfache Abfrage der Benutzer-ID

Beitrag von ma2604121 » 22.08.2011, 09:25:36

EDIT
Es geht!!
Fragt mich nicht wieso und warum. Nachdem ich heute den PC hochgefahren habe, läuft es...

Da müsste dann nur noch in die 1.14-Version die Änderung (Import des GDO) in die UmgtUserSessionStore.php eingebaut werden, bevor andere ebenfalls über das Problem stolpern.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast