# Adicionar ao serializador apenas para staff e usuário atual

**URL:** https://meta.discourse.org/t/add-to-serializer-only-for-staff-and-current-user/155261
**Category:** Development
**Created:** [Junho 18, 2020, 6:50pm UTC](https://meta.discourse.org/t/add-to-serializer-only-for-staff-and-current-user/155261 "2020-06-18T18:50:21Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Junho 18, 2020, 6:50pm UTC](https://meta.discourse.org/t/add-to-serializer-only-for-staff-and-current-user/155261/1 "2020-06-18T18:50:21Z")

</div>

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

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?

```plaintext
  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.

---

<div class="post-metadata">

### Author: ![justin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin/32/157614_2.png) [@justin](https://meta.discourse.org/u/justin)
#### Post date: [Junho 18, 2020, 7:15pm UTC](https://meta.discourse.org/t/add-to-serializer-only-for-staff-and-current-user/155261/2 "2020-06-18T19:15:44Z")

</div>

> [@pfaffman](#):
>
> Gostaria de saber como criar uma página de perfil separada contendo apenas essas informações.

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á.

> [@pfaffman](#):
>
> Mas preciso adicioná-lo ao serializador do usuário apenas para a equipe e o usuário atual.

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

```ruby
  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.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Junho 18, 2020, 7:30pm UTC](https://meta.discourse.org/t/add-to-serializer-only-for-staff-and-current-user/155261/3 "2020-06-18T19:30:37Z")

</div>

> [@justin](#):
>
> De cabeça, pode ser que você precise fazer uma espécie de “dança” para obter o objeto do usuário atual e verificar se há 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.

---

<div class="post-metadata">

### Author: ![justin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin/32/157614_2.png) [@justin](https://meta.discourse.org/u/justin)
#### Post date: [Junho 18, 2020, 7:33pm UTC](https://meta.discourse.org/t/add-to-serializer-only-for-staff-and-current-user/155261/4 "2020-06-18T19:33:41Z")

</div>

Você pode tentar uma chamada adicional de serializador assim:

> <https://github.com/discourse/discourse-intercom/blob/22bdd11e1eb4ef284a86b6e5a36fcf0bf5990d4e/plugin.rb#L9>

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

---

<div class="post-metadata">

### Author: ![paresy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paresy/32/96471_2.png) [@paresy](https://meta.discourse.org/u/paresy)
#### Post date: [Fevereiro 12, 2021, 9:38pm UTC](https://meta.discourse.org/t/add-to-serializer-only-for-staff-and-current-user/155261/5 "2021-02-12T21:38:19Z")

</div>

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

Obrigado!

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Fevereiro 13, 2021, 12:35am UTC](https://meta.discourse.org/t/add-to-serializer-only-for-staff-and-current-user/155261/6 "2021-02-13T00:35:58Z")

</div>

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

---

<div class="post-metadata">

### Author: ![paresy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paresy/32/96471_2.png) [@paresy](https://meta.discourse.org/u/paresy)
#### Post date: [Fevereiro 13, 2021, 9:23pm UTC](https://meta.discourse.org/t/add-to-serializer-only-for-staff-and-current-user/155261/7 "2021-02-13T21:23:24Z")

</div>

Parece que são os droids que eu estava procurando 🙂

```plaintext
  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?
  }

```
