이 제한을 우회할 방법이 있는지 확인해 보고 있습니다. 배경 설명을 조금 드리자면 다음과 같습니다.
우리의 그룹은 99.9%가 “Members” 역할을 가진 사용자만 접근할 수 있습니다. 공개 토론이나 지원/도움을 위해 모든 사용자에게 개방된 몇몇 그룹도 있습니다. 유료 멤버 그룹으로서, 이 사적 그룹 내부의 활동을 인정할 수 있다면 정말 좋겠습니다. 130만 개 이상의 게시글 중 대부분이 이러한 그룹 내부에 있기 때문입니다.
그 이유는 게시물에 참조하는 모든 배지가 badge_posts 테이블에 대해 쿼리를 실행하기 때문입니다. 해당 테이블에는 모든 사용자가 접근할 수 있는 카테고리에 있는 게시물만 포함됩니다.
네, 그것이 문제가 될 수 있다는 것을 이해합니다. 가능한 우회 방법은 사이트의 배지 쿼리를 badge_posts 테이블 대신 posts 테이블을 사용하도록 재작성하는 것입니다. 이는 사이트의 보호된 카테고리에 접근 권한이 없는 사용자가 사용자의 배지와 관련된 게시물을 보려고 할 때 문제를 일으킬 수 있지만, 귀하의 사이트에서는 많은 사용자에게 영향을 미치지 않을 것으로 보입니다. 아마도 이를 처리할 다른 방법들이 있을 수 있습니다.
사이트의 배지 쿼리를 badge_posts 테이블 대신 posts 테이블을 사용하도록 변경하는 것은 비교적 간단합니다. 다만, 이 문제를 근본적으로 해결하려면 더 큰 변경이 필요할 수 있습니다. 예를 들어, 스태프 카테고리에 있는 게시물에는 배지가 부여되지 않아야 하며, 게시물의 제목이 유출될 우려가 있는 기타 카테고리에도 마찬가지입니다.
자신의 사이트와 유사한 구성을 가진 사이트를 위해 플러그인을 통해 새로운 Postgres 뷰를 추가할 수 있을지 고민하고 있습니다. 이렇게 추가된 뷰는 배지 쿼리에서 badge_posts 뷰를 대체하는 데 사용될 수 있습니다.
디스코urses 엔지니어들이 이러한 접근 방식에 대해 어떻게 생각하는지, 혹은 다른 제안이 있는지 한번 살펴봅시다. 이 문제가 처음 보고된 것은 아닙니다. 이 문제에 대한 일반적인 해결책을 마련하는 것이 좋겠지만, 많은 사이트에서 작동하는 좋은 해결책은 제가 제안하는 것보다 더 복잡할 수 있습니다.
기존 배지 쿼리를 살펴보고 badge_posts 테이블의 게시물을 대상으로 하는 쿼리가 어떤 것인지, 또는 보호 카테고리에서 게시물을 제외하는 다른 방법이 있는지 파악하려고 했습니다.
다음 배지들은 특정 게시물을 쿼리하며, 비공개 카테고리에서의 활동으로는 부여되지 않습니다:
Editor
First Flag
First Like
First Link
First Quote
First Share
First Emoji
First Mention
First Onebox
First Reply By Email
Reader
Wiki Editor
Great Share
Good Share
Helpdesk
Nice Share
Welcome
Famous Link
Great Reply
Great Topic
Good Reply
Good Topic
Hot Link
Nice Reply
Nice Topic
Popular Link
다음 배지들은 특정 게시물을 쿼리하지 않으며, 비공개 카테고리에서의 활동으로 부여될 수 있습니다:
Licensed
Autobiographer
Certified
New User of the Month
Read Guidelines
Admired
Champion
Crazy in Love
Devotee
Empathetic
Aficionado
Anniversary
Campaigner
Gives Back
Higher Love
Respected
Appreciated
Enthusiast
Out of Love
Promoter
Thank You
Leader
Regular
Basic
Member
Staff
Profile Picture
이와 유사한 내용은 이미 Appreciated(20개 게시물에 1개 좋아요)와 Respected(100개 게시물에 2개 좋아요) 배지로 커버되고 있습니다. 이러한 쿼리의 몇 가지 변형이 추가될 수 있습니다. 예를 들어, 20개 게시물에 10개 좋아요를 주는 방식입니다. 슈퍼 좋아요를 받은 토픽에 대해 부여되는 배지도 좋은 아이디어일 수 있습니다 - 이는 Great Topics 배지와 동등한 역할을 하게 됩니다. 예를 들어, 사용자가 10개의 좋아요를 받은 10개의 토픽을 생성했을 때 부여될 수 있습니다.
게시물 링크가 없는 단일 게시물 또는 토픽에 대한 활동으로 부여되는 배지를 추가하는 것이 의미가 있을지 확신하지 못합니다. 예를 들어, 다음 SQL을 사용하여 대체 First Like 배지를 만들 수 있습니다:
SELECT pa1.user_id, pa1.created_at granted_at
FROM (
SELECT pa.user_id, min(pa.id) id
FROM post_actions pa
JOIN posts p on p.id = pa.post_id
WHERE post_action_type_id = 2
GROUP BY pa.user_id
) x
JOIN post_actions pa1 on pa1.id = x.id
이 쿼리가 작동하려면 “When a user acts on a post” 쿼리 대신 “Update daily” 트리거를 사용해야 합니다. 배지 페이지에서는 배지를 받은 사용자들과 배지가 부여된 시간이 함께 표시됩니다. 배지가 부여된 게시물에 대한 링크는 제공되지 않습니다:
저희 포럼은 로그인 필수로 시작했으며, 최근 일부 공개 카테고리를 추가하고 기존 카테고리는 trust_level_0 사용자들의 접근을 제한하도록 설정했습니다.
따라서 기존 사용자들의 포럼 접근 방식에는 변화가 없었지만, 위 목록에 있는 모든 배지가 취소되었습니다. 저희 포럼은 크지 않은 편이지만, 사용자들로부터 받은 피드백을 보면 배지 시스템이 완전히 망가진 것처럼 느껴지는 것 같습니다. 이러한 설정을 유지하려면 사실상 배지 시스템을 비활성화해야 할 것 같습니다.
카테고리 접근을 제한할 경우 기존 배지가 취소된다는 점을 설정 화면 어딘가에 더 명확하게 안내해 주었으면 합니다. 저희에게는 전혀 예상치 못한 상황이었습니다.
더 일반적으로 말씀드리자면, 우선순위를 이해하기 어렵습니다. 카테고리 권한과 배지 시스템 모두 Discourse의 핵심 기능으로 소개되고 있습니다. 하지만 현재 상태로는 이 두 가지를 함께 사용하기가 거의 불가능합니다. 배지가 일반적으로 접근 가능한 게시물에만 표시되는 장점은 다른 사용자들이 어떤 게시물에 배지가 수여되었는지 볼 수 있다는 것일까요? 저에게는 이것이 상대적으로 그렇게 중요한 기능이 아닙니다. 왜 이러한 가시적인 링크를 제거하고, 각 사용자의 배지에 관련된 게시물은 해당 사용자 본인에게만 표시하도록 하지 않을까요?
이것은 공개(공개)된 공간과 비공개(다양한 수준의 « 비공개 ») 공간, 그리고 개인 메시지 사이에서 커뮤니티 구성원의 방향성을 돕는다는 다른 주제에서 언급된 내용과 관련이 있어 보입니다.
웹의 반공개적 성격과 부분적으로 겹치는 청중을 다루는 것은 온라인 소셜 월드에서 주요 과제입니다. 이는 직관적이지 않습니다. 대부분의 커뮤니티는 커뮤니티의 공개/비공개 부분이 어떻게 다른지 사람들이 이해하도록 하는 방법에 대해 고민하게 될 것입니다. Discourse가 대부분의 커뮤니티에서 공개와 비공개의 혼합이 기본이 될 것이라고 가정하고, 커뮤니티 구성원이 이를 탐색하도록 돕는 방법을 살펴보는 것이 의미가 있을 수 있습니다.