2012-12-07 7 views
6

Ich habe eine Seite codiert, die alle Administratoren des Systems anzeigt. Ich möchte meine Abfrage so anpassen, dass der aktuell authentifizierte Benutzer von der Liste ausgeschlossen wird.
Nun weiß ich, ich kann die user_id von der Steuerung und übergeben sie an die Entität Repository, aber ich frage mich, ob es eine Möglichkeit gibt, direkt über die Entity Repository zugreifen?Symfony2 erhalten Benutzer-ID in Entität Repository

Zum Beispiel:

use Doctrine\ORM\EntityRepository; 
use Doctrine\ORM\NoResultException; 

use Symfony\Component\Security\Core\User\UserInterface; 
use Symfony\Component\Security\Core\User\UserProviderInterface; 
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException; 
use Symfony\Component\Security\Core\Exception\UnsupportedUserException; 

class AdminUserRepository extends EntityRepository implements UserProviderInterface 
{ 
    public function getAdmins($int = 10, $offset = 0, array $orderBy = array('admin_id', 'asc')){ 
     $admin_id = fetch the admin id ?; 
     $query = $this->createQueryBuilder('admins') 
      ->where("admins.admin_id != '".$admin_id."'") 
      ->orderBy('admins.'.$orderBy[0], $orderBy[1]) 
      ->setFirstResult($offset) 
      ->setMaxResults($int) 
      ->getQuery() 
      ->getResult(); 
     return $query; 
    } 
} 

Antwort

1

So haben Sie einen aktuellen Benutzer-ID (sagen wir mal, $currentUserId), und Sie wollen eine Abfrage für alle Benutzer mit einer ID schreiben, die nicht gleich $currentUserId ist?

Try this:

class SomeController 
{ 
    public function someAction() 
    { 
     ... 

     $qb = $userRepository->createQueryBuilder("user") 
      ->where("user.id != ?1") 
      ->setParameter(1, $currentUserId); 

     $usersExcludingCurrent = $qb->getQuery()->getResult(); 

    ... 
    } 
} 

bearbeiten

Ahh, ich sehe, was du sagst ...

Nun sollte das Repository wirklich blind sein draußen etwas von sich selbst. Das heißt, es ist nicht Container-bewusst, und sollte daher nicht wissen, wer der aktuelle Benutzer ist.

Mein Vorschlag wäre, Ihrem Repository eine Funktion zu geben, die alles außer einem bestimmten Benutzer oder User ID bekommt. Etwas wie:

class AdminUserRepository extends EntityRepository implements UserProviderInterface 
{ 
    public function getAllAdminsExcept($userId, $int = 10, $offset = 0, array $orderBy = array('admin_id', 'asc')) 
     { 
      ... 
     } 
} 

Und dann die "aktuelle Benutzer" -Logik in Ihren Controller. Sie könnten sogar einen Dienst definieren, der sowohl auf @security als auch auf @doctrine zugreifen kann, und alle Logik dort unterbringen. Ihr Anruf, aber ich würde sagen, dass Sie Ihr Repository definitiv davon in Kenntnis setzen sollten, was im Sicherheitsdienst passiert.

+0

ich meine Frage aktualisiert. Ich weiß, ich könnte es so machen, wie du es sagst, aber ich schaue, ob es im 'EntityRepository' selbst möglich ist. – tftd

+0

/aktualisiert ... hoffe das hilft. –

+0

Ich dachte das gleiche, aber es ist irgendwie logisch (für mich), authentifizierte Benutzerdaten aus einem Repository abrufen zu können. Danke für Ihre Hilfe :) – tftd

-3

Sie können Benutzer-Objekt abrufen

public function indexAction() 
{ 
    $user = $this->getUser(); 
} 

Trog Controller oder Ansicht durch Zweig Vorlage:

<p>Username: {{ app.user.username }}</p> 

dies aus symfony 2 doc kommen Probe.

+0

Sie können nicht im Repository – Matheno