スタッフと現在のユーザーに対してのみシリアライザーに追加

ユーザーシリアライザにデータを追加するプラグインの開発を進めています。動作しています!:tada:

ただし、この追加はスタッフと現在のユーザーに対してのみ、ユーザーシリアライザに含める必要があります。

でも…少し立ち戻って考えると、この情報はユーザープロフィールページでのみ必要かもしれません。だとすれば、別の場所に配置する必要があるでしょうか?

  add_to_serializer(:user, :manager_status) {
    # TODO: 現在のユーザーとスタッフのみに含める
    return object.manager_status
  }

現在はこれをユーザープロフィールページに表示しています。この情報だけをまとめた別のプロフィールページを作成する方法を知りたいです。その手のリファレンスや例へのリンクがあれば助かります。

「いいね!」 1

新しいルートを作成し、スタッフと現在のユーザー以外の人が閲覧できないようにガードする必要があります。おそらく、現在行っているシリアライズよりもはるかに複雑になるでしょう。

以下のような方法で実現できると思います。

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

思い付きですが、現在のユーザーオブジェクトを取得して一致を確認するために、少し工夫が必要かもしれません。

「いいね!」 3

そうですね。現在のユーザーを取得する方法がわかりません。おそらく、ご提示いただいたコードは、(現在のユーザーではなく)ユーザーが管理者である場合に追加するものだと思います。

「いいね!」 1

次のように、追加のシリアライザー呼び出しを試すことができます:

私はこれをテストしていないため、必要なようにセキュリティ対策を講じてください。

「いいね!」 3

@pfaffman これに対する解決策は見つかりましたか?

ありがとうございます!

「いいね!」 1

覚えていませんが、上記が機能すると思います。

「いいね!」 2

探していたのはこのロボットたちのようですね :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 は管理者とモデレーターを許可します
    object.user.custom_fields['xxx'] if object.user && scope.is_staff?
  }
「いいね!」 3