Ajouter au sérialiseur uniquement pour le personnel et l'utilisateur actuel

Je travaille sur un plugin qui doit ajouter des éléments au sérialiseur utilisateur. Ça fonctionne ! :tada:

Mais je dois l’ajouter au sérialiseur utilisateur uniquement pour les membres du personnel et l’utilisateur actuel.

Mais . . . en y réfléchissant, j’ai peut-être vraiment besoin de ces informations uniquement sur la page de profil utilisateur, alors peut-être devrais-je les placer ailleurs ?

  add_to_serializer(:user, :manager_status) {
    # TODO : inclure uniquement pour l'utilisateur actuel et les membres du personnel
    return object.manager_status
  }

J’affiche actuellement cela sur la page de profil utilisateur. J’aimerais savoir comment créer une page de profil séparée contenant uniquement ces éléments. Des liens vers des ressources traitant de cela seraient les bienvenus.

Vous devrez créer une nouvelle route et vous assurer qu’elle est protégée contre tout accès, sauf pour le personnel et l’utilisateur actuel. C’est probablement beaucoup plus complexe que de le sérialiser là où vous êtes.

Je pense que vous pouvez le faire quelque part comme ceci :

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

À première vue, vous devrez peut-être faire une petite manœuvre pour récupérer l’objet de l’utilisateur actuel et vérifier s’il correspond.

Ouais. Je n’arrive pas à comprendre comment obtenir l’utilisateur actuel. Je pense que ce que tu as proposé ajoutera l’utilisateur si c’est un administrateur (mais pas l’utilisateur actuel).

Vous pourriez essayer un appel de sérialiseur supplémentaire comme ceci :

Je n’ai pas testé cela, donc assurez-vous de le sécuriser comme nécessaire.

@pfaffman As-tu trouvé une solution pour cela ?

Merci !

Je ne me souviens plus, mais je pense que ce qui précède devrait fonctionner.

Cela semble être les droids que je cherchais :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?

    # Le personnel permettra aux administrateurs et aux modérateurs
    object.user.custom_fields['xxx'] if object.user && scope.is_staff?
  }