2016-09-05 5 views
-1

Ich lerne Django + DRF + Reagieren und ich erreichte die Phase, in der es Zeit ist, einige Endpunkte zu schützen. Einige sind einfacher zu schützen, nur eine Erlaubnis, so dass nur der Benutzer, der ein bestimmtes Objekt (und die Admins) erstellt hat, es sehen kann. Es gibt einen Endpunkt, der für mich schwierig ist. Es ist ein GET Anruf und gibt so etwas wie:Django Rest Framework - der beste Weg zu einem Endpunkt?

{book: "Who am I and how come", 
id: "whatever31", 
reading: ["user1", "user2"]} 

Ich möchte diesen Endpunkt schützen auf der Grundlage der Benutzer die Anforderung (Session auth) zu machen, so können nur Gespräche von user1 und user2 kommt dieses Objekt zugreifen kann (auch nicht auszusetzen reading Feld, aber das ist wahrscheinlich eine andere Diskussion). Sollte ich eine benutzerdefinierte Berechtigung für die DRF-Ansicht verwenden? Sollte ich stattdessen einen Filter in queryset Methode verwenden? Vielleicht beide?

+0

Haben Sie in schauen auf dem Controller einen Dekorateur zu schaffen? Klingt so, als wäre das der richtige Ort dafür. http://stackoverflow.com/questions/5469159/how-to-write-a-custom-decorator-in-django – KVISH

Antwort

1

Individuelle Erlaubnis wie ein Dekorateur zu schaffen, beide passen, was Sie brauchen:

class InReader(permissions.IsAuthenticated): 
    def has_object_permission(self, request, view, obj): 
     return request.user in obj.reading 
+0

Und wenn ich diese Objekte als Liste bekomme, nehme ich an, dass nur derjenige zurückgegeben wird, der die Berechtigung erfüllt. – vicusbass

+0

Dies gibt nur wahr oder falsch zurück, um den request.user in obj.reading list oder nicht zu sagen. – Windsooon

+0

Ich denke, Ihr Beispiel sollte 'has_object_permission' stattdessen verwenden, oder? Wie auch immer, danke, guter Rat. – vicusbass

Verwandte Themen