pfaffman
(Jay Pfaffman)
6월 18, 2020, 6:50오후
1
사용자 직렬화기(user serializer)에 데이터를 추가해야 하는 플러그인을 개발하고 있습니다. 작동합니다!
하지만 스태프와 현재 사용자에 대해서만 사용자 직렬화기에 추가해야 합니다.
그런데… 한 발 물러서서 생각해보면, 사실 이 정보는 사용자 프로필 페이지에서만 필요할 수도 있겠네요. 그렇다면 다른 곳에 두는 것이 더 나을까요?
add_to_serializer(:user, :manager_status) {
# TODO: 현재 사용자와 스태프에게만 포함
return object.manager_status
}
현재 이 정보를 사용자 프로필 페이지에서 표시하고 있습니다. 이 정보만 별도로 보여주는 독립적인 프로필 페이지를 만드는 방법을 알고 싶습니다. 그렇게 구현한 사례가 있다면 링크를 공유해 주시면 좋겠습니다.
justin
(Justin DiRose)
6월 18, 2020, 7:15오후
2
새로운 라우트를 생성하고, 스태프와 현재 사용자가 아닌 다른 누구도 이를 볼 수 없도록 보호해야 합니다. 현재 위치에서 직렬화하는 것보다 훨씬 복잡할 가능성이 높습니다.
다음과 같은 방식으로 처리할 수 있을 것 같습니다:
add_to_serializer(:user, :manager_status) {
return object.manager_status if object.admin || object.staff
}
즉석에서 생각하기로는, 현재 사용자 객체를 가져와서 일치하는지 확인하기 위해 몇 가지 처리( dance )를 해야 할 수도 있습니다.
pfaffman
(Jay Pfaffman)
6월 18, 2020, 7:30오후
3
네. 현재 사용자를 어떻게 가져와야 할지 모르겠어요. 님이 제시하신 코드는 사용자가 관리자이긴 하지만 현재 사용자가 아닐 때만 해당 정보를 추가하는 것 같습니다.
justin
(Justin DiRose)
6월 18, 2020, 7:33오후
4
다음과 같이 추가 시리얼라이저 호출을 시도해 볼 수 있습니다:
# name: discourse-intercom
# about: Integration features between Intercom and Discourse
# version: 0.1
# author: Vinoth Kannan
enabled_site_setting :intercom_enabled
after_initialize do
add_to_serializer(:current_user, :email) do
object.email
end
add_to_serializer(:current_user, :intercom_hash) do
OpenSSL::HMAC.hexdigest(
'sha256',
SiteSetting.intercom_secret_key,
object.email
)
end
이것을 테스트해 보지 않았으므로, 필요한 대로 보안이 제대로 설정되어 있는지 확인해 주세요.
paresy
(Michael)
2월 12, 2021, 9:38오후
5
@pfaffman 이 문제에 대한 해결책을 찾았나요?
감사합니다!
pfaffman
(Jay Pfaffman)
2월 13, 2021, 12:35오전
6
기억은 안 나는데, 위 내용은 작동할 것 같습니다.
paresy
(Michael)
2월 13, 2021, 9:23오후
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 will allow for Admins and Moderators
object.user.custom_fields['xxx'] if object.user && scope.is_staff?
}