Aggiungi al serializzatore solo per lo staff e l'utente corrente

Sto lavorando a un plugin che deve aggiungere dati al serializzatore dell’utente. Funziona! :tada:

Ma ho bisogno di aggiungerlo al serializzatore dell’utente solo per lo staff e per l’utente corrente.

Ma… ripensandoci, forse ho bisogno di queste informazioni solo nella pagina del profilo utente, quindi forse dovrei metterle altrove?

  add_to_serializer(:user, :manager_status) {
    # TODO: includi solo per l'utente corrente e lo staff
    return object.manager_status
  }

Attualmente sto visualizzando questo nella pagina del profilo utente. Vorrei sapere come creare una pagina del profilo separata con solo queste informazioni. Link a qualcosa che lo faccia sarebbero ottimi.

Dovresti creare una nuova rotta e assicurarti che sia protetta in modo che solo lo staff e l’utente corrente possano visualizzarla. Probabilmente è molto più complesso che serializzarla dove ti trovi ora.

Penso che tu possa farlo in questo modo:

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

A memoria, potresti dover fare un po’ di manovre per recuperare l’oggetto dell’utente corrente e verificare se corrisponde.

Sì. Non riesco a capire come ottenere l’utente corrente. Penso che la tua soluzione lo aggiunga solo se l’utente (ma non quello corrente) è un amministratore.

Potresti provare una chiamata aggiuntiva al serializzatore come questa:

Non l’ho testata, quindi assicurati di configurarla in modo sicuro secondo le tue esigenze.

@pfaffman Hai trovato una soluzione per questo?

Grazie!

Non mi ricordo, ma penso che quanto sopra dovrebbe funzionare.

Sembra che questi siano i droidi che stavo cercando :slight_smile:

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

    # Lo staff consentirĂ  agli Amministratori e ai Moderatori
    object.user.custom_fields['xxx'] se object.user && scope.is_staff?
  }