관리자와 현재 사용자만 직렬화기에 추가

사용자 직렬화기(user serializer)에 데이터를 추가해야 하는 플러그인을 개발하고 있습니다. 작동합니다! :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
  }

즉석에서 생각하기로는, 현재 사용자 객체를 가져와서 일치하는지 확인하기 위해 몇 가지 처리( dance )를 해야 할 수도 있습니다.

네. 현재 사용자를 어떻게 가져와야 할지 모르겠어요. 님이 제시하신 코드는 사용자가 관리자이긴 하지만 현재 사용자가 아닐 때만 해당 정보를 추가하는 것 같습니다.

다음과 같이 추가 시리얼라이저 호출을 시도해 볼 수 있습니다:

이것을 테스트해 보지 않았으므로, 필요한 대로 보안이 제대로 설정되어 있는지 확인해 주세요.

@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 will allow for Admins and Moderators
    object.user.custom_fields['xxx'] if object.user && scope.is_staff?
  }