Django-Graphen mit Relais, das den Zugriff auf Abfragen basierend auf der ID einschränkt

ccsv

Ich versuche, einzelne Objektabfragen auf den Benutzer zu beschränken, der sie erstellt hat.

Models.py

class Env(models.Model):
    name = models.CharField(max_length=50)
    user = models.ForeignKey(
        User, on_delete=models.CASCADE)
    description = TextField()

Schema.py

class EnvNode(DjangoObjectType):
    class Meta:
        model = Env
        filter_fields =  {
            'name': ['iexact'],
            'description': ['exact', 'icontains'],
            }
        interfaces = (relay.Node, )


Query(object):
    env = relay.Node.Field(EnvNode)
    all_envs = DjangoFilterConnectionField(EnvNode)

Ich habe versucht, eine Auflösungsabfrage hinzuzufügen, aber sie funktionierte nur für die Abfrage "all_env" mit dem Filter und nicht für die Einzelobjektabfrage

def resolve_env(self, info):
    env = Env.objects.filter(user = info.context.user.id)
    if env is not None:
        return env
    else:
        return None

Es wurde auch versucht, dem EnvNode eine Klassenmethode hinzuzufügen, wie hier unter Filtern des knotenbasierten ID-Zugriffs empfohlen :

@classmethod
def get_node(context, cls, id, info):
    try:
        env =  cls._meta.model.objects.get(id = id)
    except cls._meta.model.DoesNotExist:
        return None

    if context.user == env.user:
        return env
    return None

aber ich habe einen Fehler bekommen:

"message": "get_node() missing 1 required positional argument: 'info'",
Marco

Die Dokumentation scheint nicht korrekt zu sein, auch Ihre Parameter sind nicht in der richtigen Reihenfolge für die Methode get_node .

Es gibt nur drei Parameter für den Anruf

  • Die erste ist Ihre DjangoObjectType- Unterklasse: EnvNode
  • Die zweite ist eine graphql.execution.base.ResolveInfo, die einen Verweis auf den Kontext enthält. Sie können das Benutzerobjekt von dort erhalten.
  • Die dritte ist die tatsächliche ID für das Objekt.

Sie sollten es so schreiben, damit die Einschränkung funktioniert:

@classmethod
def get_node(cls, info, id):
    try:
        env = cls._meta.model.objects.get(id=id, user=info.context.user)

    except cls._meta.model.DoesNotExist:
        return None

    return env

Ich hoffe es hilft.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Zugriff auf den Groupby-Wert basierend auf der ID?

Django-Graphen-Relay, das Abfragen auf Objekte beschränkt, die dem Benutzer gehören

Wie kann ich einschränken, wer mit Graphen-Django Zugriff auf den GraphiQL-API-Browser hat?

Der Zugriff auf den Bildschirm für die Nachbearbeitung kann mit django nicht eingeschränkt werden

Django beschränkt den Zugriff auf Benutzerobjekte

Zugriff auf das Vektorelement über den Index mit der Linse

Gibt es etwas, das einem Zugriffsmodifikator entspricht, der den Zugriff mit C # auf nur einen Thread beschränkt?

Zugriff auf das Element einer Liste mit Karte basierend auf Permutationen der Indizes

Zugriff auf die Anzahl der Abfragen mit Kriterien

Der Django-Administrator beschränkt den Zugriff auf die Listenansicht

Zugriff auf das ViewModel-Feld in SwiftUI mit Xcode 12: "Zugriff auf den Statuswert außerhalb der Installation in einer Ansicht"

Dynamische Abfragen mit Ausdrücken basierend auf der Laufzeit

IAM-Richtlinie für den Zugriff auf S3-Ordner basierend auf der Cognito-ID

Auswählen von Objekten aus einer Liste mit jq basierend auf einem Wert, Zugriff auf das Objekt der obersten Ebene

Zugriff auf Abfragen über den Datumsbereich

Rollenbasierter Zugriff auf Flask-Admin - Ändern Sie den Zugriff basierend auf der Rolle

Wie kann ich das Ergebnis basierend auf den Werten in der select-Anweisung einschränken?

Wie kann der Zugriff des Benutzers auf das Skript für den Community Connector eingeschränkt werden?

mysql Abfragen basierend auf den neuesten Beziehungsdaten

Dax/Powerquery ruft das letzte Datum mit einem Land basierend auf der Einschränkung ab

So zeichnen Sie mit NetworkX einen Graphen basierend auf der Nachbarschaft von Knoten

Reagieren Sie auf den Zugriff auf das Ref-Attribut mit der Namenszeichenfolge, die verkettet werden musste

Erstellen Sie Abfragen basierend auf den Eigenschaften von Kanten, NICHT auf der Existenz von Kanten in Cypher

Ist der direkte Zugriff auf das Fremdschlüssel-ID-Feld in Django schneller?

.NET Core 3.1-Webanwendung mit React - So verhindern Sie den Zugriff basierend auf der Active Directory-Gruppe

Wie kann ich den Zugriff auf sensible Spalten in der Apache Drill-Ansicht basierend auf Benutzerberechtigungen in einer anderen Ansicht einschränken?

Zugriff auf den Y-Wert eines Liniendiagramms basierend auf der Cursorposition

Firebase - Ermöglicht dem Benutzer den Zugriff auf Teile der Datenbank basierend auf Datenbankinformationen

Zugriff auf bestimmte Werte in einem Datenrahmen basierend auf den Indexwerten mit loc [i, j]

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv