Zur Serialisierung nur für Mitarbeiter und den aktuellen Benutzer hinzufügen

Ich arbeite an einem Plugin, das dem User-Serializer zusätzliche Daten hinzufügen muss. Es funktioniert! :tada:

Aber ich muss es nur für Staff und den aktuellen Benutzer zum User-Serializer hinzufügen.

Aber . . . vielleicht sollte ich kurz zurücktreten: Ich brauche diese Informationen eigentlich nur auf der Benutzerprofilseite. Vielleicht sollte ich sie woanders einfügen?

  add_to_serializer(:user, :manager_status) {
    # TODO: Nur für den aktuellen Benutzer und Staff einfügen
    return object.manager_status
  }

Ich zeige dies derzeit auf der Benutzerprofilseite an. Ich würde gerne wissen, wie man eine separate Profilseite erstellt, die nur diese Informationen enthält. Links zu etwas, das das macht, wären toll.

1 „Gefällt mir“

Du müsstest eine neue Route erstellen und sicherstellen, dass sie nur für Mitarbeiter und den aktuellen Benutzer zugänglich ist. Das ist wahrscheinlich viel komplexer als die Serialisierung an der aktuellen Stelle.

Ich denke, das könntest du so umsetzen:

  add_to_serializer(:user, :manager_status) {
    return object.manager_status if object.admin || object.staff
  }

Aus dem Stegreif musst du vielleicht ein bisschen Trickserei anwenden, um das aktuelle Benutzerobjekt zu laden und einen Abgleich vorzunehmen.

3 „Gefällt mir“

Ja, ich kann nicht herausfinden, wie ich den aktuellen Benutzer bekomme. Ich denke, deine Lösung wird ihn hinzufügen, wenn der Benutzer (aber nicht der aktuelle Benutzer) ein Administrator ist.

1 „Gefällt mir“

Du könntest einen zusätzlichen Serialisierer-Aufruf wie folgt versuchen:

Ich habe dies nicht getestet, also solltest du sicherstellen, dass es entsprechend deinen Anforderungen abgesichert ist.

3 „Gefällt mir“

@pfaffman Hast du eine Lösung dafür gefunden?

Danke!

1 „Gefällt mir“

Ich erinnere mich nicht, aber ich denke, das oben Genannte sollte funktionieren.

2 „Gefällt mir“

Das scheinen die Droiden zu sein, die ich gesucht habe :slight_smile:

  add_to_serializer(:post, :user_xxx, false) {
    #object.user.custom_fields['xxx'] if object.user && scope.is_admin?
    #object.user.custom_fields['xxx'] if object.user && scope.is_moderator?

    # Mitarbeiter gewähren Zugriff für Administratoren und Moderatoren
    object.user.custom_fields['xxx'] if object.user && scope.is_staff?
  }
3 „Gefällt mir“