Добавить в сериализатор только для сотрудников и текущего пользователя

Я работаю над плагином, который должен добавлять данные в сериализатор пользователя. Всё работает! :tada:

Но мне нужно добавлять эти данные в сериализатор пользователя только для сотрудников и текущего пользователя.

Однако… возможно, стоит отступить: мне, пожалуй, нужна эта информация только на странице профиля пользователя. Может быть, стоит разместить её в другом месте?

  add_to_serializer(:user, :manager_status) {
    # TODO: включить только для текущего пользователя и сотрудников
    return object.manager_status
  }

Сейчас я отображаю это на странице профиля пользователя. Я хотел бы узнать, как создать отдельную страницу профиля, где будет только эта информация. Ссылки на материалы, посвящённые этому, были бы очень кстати.

Вам придётся создать новый маршрут и убедиться, что к нему не имеют доступа все, кроме сотрудников и текущего пользователя. Это, вероятно, гораздо сложнее, чем просто сериализовать данные в том месте, где вы находитесь.

Я думаю, это можно сделать примерно так:

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

Сходу можно сказать, что, возможно, придётся немного потрудиться, чтобы получить объект текущего пользователя и проверить совпадение.

Да. Я не могу понять, как получить текущего пользователя. Мне кажется, что то, что вы предложили, добавит его, если пользователь (но не текущий) является администратором.

Вы можете попробовать дополнительный вызов сериализатора, например:

Я не тестировал это, поэтому вам стоит убедиться, что оно защищено так, как вам нужно.

@pfaffman Вы нашли решение этой проблемы?

Спасибо!

Я не помню, но, думаю, вышеописанное должно сработать.

Похоже, это те самые дроиды, которых я искал :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?
  }