Magento 2: Comment obtenir les détails de l'utilisateur administrateur actuel?

12

Comment obtenir les détails de l'utilisateur administrateur actuel en back-end?

Mike Zhang
la source

Réponses:

30

vous devez l'ajouter au constructeur de votre classe

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

Ensuite, créez cette méthode

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

cela vous donnera l'administrateur actuellement connecté.
Vous pourrez ensuite obtenir les détails comme $user->getUsername()ou $user->getEmail().

Marius
la source
1
Remarque: Après avoir ajouté les codes, nous devons exécuter bin/magento setup:di:compile, sinon il semblerait que l' erreur " Session aucune donnée ".
Key Shang
réponse parfaite avec explication !!! +1 :)
SagarPPanchal
@Marius J'ai ajouté la connexion en tant que backend du formulaire client. Mais je veux les détails de l'administrateur sur la page de visualisation du produit qui se connectent au client.
Masud Shaikh
vous ne pouvez pas accéder à la session d'administration depuis le frontend.
Marius
7

Comment obtenir les détails de l'utilisateur administrateur actuel?

injecter une session backend dans votre contrôleur

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

}

et l'utiliser pour obtenir un nom d'utilisateur ou un e-mail

 $this->authSession->getUser()->getUsername();
$this->authSession->getUser()->getEmail();
Surendra Kumar Ahir
la source
Il n'est cependant pas nécessaire d'injecter dans votre contrôleur.
MagePsycho
3

Votre contrôleur s'étend déjà de \Magento\Backend\App\Actionsorte qu'il possède déjà l'objet d'autorisation. Aucune injection supplémentaire n'est nécessaire. Pour obtenir l'utilisateur, utilisez simplement cette fonction:

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

D'autres réponses suggèrent des injections en double, qui ne sont pas nécessaires.

Jacques
la source