pfaffman
(Jay Pfaffman)
1
ユーザーシリアライザにデータを追加するプラグインの開発を進めています。動作しています!
ただし、この追加はスタッフと現在のユーザーに対してのみ、ユーザーシリアライザに含める必要があります。
でも…少し立ち戻って考えると、この情報はユーザープロフィールページでのみ必要かもしれません。だとすれば、別の場所に配置する必要があるでしょうか?
add_to_serializer(:user, :manager_status) {
# TODO: 現在のユーザーとスタッフのみに含める
return object.manager_status
}
現在はこれをユーザープロフィールページに表示しています。この情報だけをまとめた別のプロフィールページを作成する方法を知りたいです。その手のリファレンスや例へのリンクがあれば助かります。
「いいね!」 1
justin
(Justin DiRose)
2
新しいルートを作成し、スタッフと現在のユーザー以外の人が閲覧できないようにガードする必要があります。おそらく、現在行っているシリアライズよりもはるかに複雑になるでしょう。
以下のような方法で実現できると思います。
add_to_serializer(:user, :manager_status) {
return object.manager_status if object.admin || object.staff
}
思い付きですが、現在のユーザーオブジェクトを取得して一致を確認するために、少し工夫が必要かもしれません。
「いいね!」 3
pfaffman
(Jay Pfaffman)
3
そうですね。現在のユーザーを取得する方法がわかりません。おそらく、ご提示いただいたコードは、(現在のユーザーではなく)ユーザーが管理者である場合に追加するものだと思います。
「いいね!」 1
justin
(Justin DiRose)
4
次のように、追加のシリアライザー呼び出しを試すことができます:
私はこれをテストしていないため、必要なようにセキュリティ対策を講じてください。
「いいね!」 3
paresy
(Michael)
5
@pfaffman これに対する解決策は見つかりましたか?
ありがとうございます!
「いいね!」 1
paresy
(Michael)
7
探していたのはこのロボットたちのようですね 
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