Magento 2: Wie erhalte ich aktuelle Administrator-Benutzerdetails?

12

Wie erhalte ich die aktuellen Administrator-Benutzerdetails im Back-End?

Mike Zhang
quelle

Antworten:

29

Sie müssen dies dem Konstruktor Ihrer Klasse hinzufügen

protected $authSession;
public function __construct(
    ....
    \Magento\Backend\Model\Auth\Session $authSession, 
    ....
) {
    ....
    $this->authSession = $authSession;
    ....
}

Dann erstellen Sie diese Methode

public function getCurrentUser()
{
    return $this->authSession->getUser();
}

Dadurch erhalten Sie den aktuell angemeldeten Administrator.
Sie können später die Details wie $user->getUsername()oder erhalten $user->getEmail().

Marius
quelle
1
Hinweis: Nach dem Hinzufügen der Codes muss ausgeführt werden bin/magento setup:di:compile, da sonst der Fehler " Sitzung keine angegeben " angezeigt wird.
Key Shang
perfekte Antwort mit Erklärung !!! +1 :)
SagarPPanchal
@Marius Ich habe Login als Kundenformular-Backend hinzugefügt. Ich möchte jedoch Administratordetails auf der Produktansichtseite, die sich beim Kunden anmelden.
Masud Shaikh
Sie können nicht über das Frontend auf die Administrationssitzung zugreifen.
Marius
7

Wie erhalte ich aktuelle Administrator-Benutzerdetails?

Injizieren Sie eine Backend-Sitzung in Ihren Controller

public function __construct(
....
\Magento\Backend\Model\Auth\Session $authSession, 
  ....
 ) {
  ....
   $this->authSession = $authSession;
   ....

}}

und verwenden Sie diese Option, um den Benutzernamen oder die E-Mail-Adresse abzurufen

 $this->authSession->getUser()->getUsername();
$this->authSession->getUser()->getEmail();
Surendra Kumar Ahir
quelle
Es ist jedoch nicht erforderlich, in Ihren Controller einzuspritzen.
MagePsycho
3

Ihr Controller wird bereits erweitert, \Magento\Backend\App\Actionsodass er bereits über das Berechtigungsobjekt verfügt. Es sind keine zusätzlichen Injektionen erforderlich. Um den Benutzer zu erhalten, verwenden Sie einfach diese Funktion:

    /** @var \Magento\User\Model\User $user*/
    $user = $this->_auth->getUser();

Andere Antworten deuten auf doppelte Injektionen hin, die nicht benötigt werden.

Jacques
quelle