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.

1 me gusta

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.

3 Me gusta

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.

1 me gusta

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.

3 Me gusta

@pfaffman ¿Encontraste una solución para esto?

¡Gracias!

1 me gusta

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

2 Me gusta

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?
  }
3 Me gusta