Agregar al serializador solo para personal y usuario actual

Estoy trabajando en un plugin que necesita agregar cosas al serializador de usuarios. ¡Funciona! :tada:

Pero necesito agregarlo al serializador de usuarios solo para el personal y el usuario actual.

Pero… retrocediendo un poco, quizás realmente necesito esta información solo en la página de perfil del usuario, así que ¿quizás debería ponerla en otro lugar?

  add_to_serializer(:user, :manager_status) {
    # TODO: incluir solo para el usuario actual y el personal
    return object.manager_status
  }

Actualmente estoy mostrando esto en la página de perfil del usuario. Me gustaría saber cómo crear una página de perfil separada con solo esta información. Enlaces a algo que haga eso serían geniales.

Tendrías que crear una nueva ruta y asegurarte de que esté protegida para que solo el personal y el usuario actual puedan verla. Probablemente sea mucho más complejo que serializarlo donde estás ahora.

Creo que puedes hacer esto de algo así:

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

Por lo que sé de memoria, es posible que tengas que hacer un pequeño truco para obtener el objeto del usuario actual y verificar si coincide.

Sí. No logro averiguar cómo obtener el usuario actual. Creo que lo que tienes añadirá el usuario si este (pero no el usuario actual) es administrador.

Podrías probar una llamada adicional al serializador de esta manera:

No lo he probado, así que asegúrate de que esté seguro según tus necesidades.

@pfaffman ¿Encontraste una solución para esto?

¡Gracias!

No lo recuerdo, pero creo que lo anterior debería funcionar.

Parece que estos son los droides que buscaba :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?

    # El personal permitirá a los administradores y moderadores
    object.user.custom_fields['xxx'] if object.user && scope.is_staff?
  }