Adicionar ao serializador apenas para staff e usuário atual

Estou trabalhando em um plugin que precisa adicionar coisas ao serializador de usuários. Está funcionando! :tada:

Mas preciso adicioná-lo ao serializador de usuários apenas para a equipe e para o usuário atual.

Mas… voltando um pouco, talvez eu realmente precise dessa informação apenas na página de perfil do usuário, então talvez eu precise colocá-la em outro lugar?

  add_to_serializer(:user, :manager_status) {
    # TODO: incluir apenas para o usuário atual e equipe
    return object.manager_status
  }

Atualmente estou exibindo isso na página de perfil do usuário. Gostaria de saber como criar uma página de perfil separada com apenas essas informações. Links para algo que faça isso seriam ótimos.

Você teria que criar uma nova rota e garantir que ela seja protegida, impedindo que qualquer pessoa, exceto a equipe e o usuário atual, a visualize. Provavelmente é muito mais complexo do que apenas serializá-la onde você está.

Estou pensando que você pode fazer isso mais ou menos assim:

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

De cabeça, você pode ter que dar um jeito de obter o objeto do usuário atual e verificar se há uma correspondência.

Sim. Não consigo descobrir como obter o usuário atual. Acho que o que você tem vai adicioná-lo se o usuário (mas não o usuário atual) for um administrador.

Você pode tentar uma chamada adicional de serializador assim:

Não testei isso, então você deve garantir que esteja seguro conforme necessário.

@pfaffman Você encontrou uma solução para isso?

Obrigado!

Não me lembro, mas acho que o acima deve funcionar.

Parece que são os droids que eu estava procurando :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?

    # Staff permitirá para Administradores e Moderadores
    object.user.custom_fields['xxx'] if object.user && scope.is_staff?
  }