0

Hintergrund

wir einen Service haben geben, wo ein django Super-Administrator kann in einer bestimmten org alle Benutzer anmelden und sehen, und das Super-Administrator kann „log in“ an die Stelle dieses Benutzers. Dh wir annehmenwie ein Benutzer eine einzelne Sitzung zusätzliche Erlaubnis in Django

super admin = joe 
users = mike, abe, tony 

dann joe haben kann in ein org einzuloggen, siehe mike, abe und tony, dann kann joe in das System einloggen, als ob sie mike sind. Alles, was sie sehen und tun, wird so aussehen, als würde Mike es tun. Also, wenn der Super-Admin die Erlaubnis hat, öffentliche Ereignisse zu erstellen, aber Mike nicht, wenn der Super-Administrator sich als Mike einloggt, können sie auch keine Ereignisse erstellen.

So weit so gut.

Allerdings haben wir festgestellt, dass wir in vielen Fällen möchten, dass sich der Super Admin als Mike anmeldet und trotzdem als Super Admin im System erkannt wird. Dies ist nützlich für Datenmigrationszwecke, dh manchmal sollte der Super Admin eigentlich Sachen im Namen von Mike machen, die Mike selbst nicht machen kann.

Problem

die Idee hier ist, dass ich das System, dass Super-Administrator erkennen möchte als mike angemeldet. Bei allen Fragen, die ich online gesehen habe (wie this one), geht es jedoch mehr um die Zuweisung von permanenten Berechtigungen (dh durch Speicherung in der db) als um temporäre/ephemere.

Dies ist der Code, wenn der Admin klickt auf den Login-Button neben mike aufgerufen wird:

class LoginAsView(APIView): 
    permission_classes = [] 

    def get(self, request, *args, **kwargs): 
     if request.user.is_superuser and 'username' in request.GET: 
      user = User.objects.get(email=request.GET['username']) 
      user.backend = settings.AUTHENTICATION_BACKENDS[0] 
      login(self.request, user) 
      return Response('/', 302, headers={'Location': '/'}) 
     raise PermissionDenied('NO U') 

so, wie Sie den Benutzer sehen kann ich abrufen verhält sich genau so, wie wenn dieser Benutzer (dh mike) organisch angemeldet. Ich möchte in dieser Methode Mike einige temporäre spezielle Berechtigungen zuweisen, die es Mike ermöglicht, Dinge zu tun, die er normalerweise nicht kann.

+0

ich diese Empfehlung bekam .. aber es scheint wie eine Sackgasse in ihm selbst: "Sie können speichern ein Flag in der Sitzung, und ändern Sie User.has_permission etc, um die Sitzung auch zu sehen .. aber das ist schwierig, weil diese Funktionen keinen Zugriff auf die Anfrage haben. " – abbood

Antwort

Verwandte Themen