주제 소유자가 공개할 때까지 주제 답글이 보이지 않나요?

제 파트너가 고대 그리스어와 고전 라틴어를 가르치는 교사인데, 몇 년째 수업에서 Discourse를 활용하고 있습니다. 주로 과제를 배포하고 나중에 토론하는 용도로 사용하고 있습니다. 다만, 지금까지는 수업 시간에 종이로 과제를 제출받았습니다.

하지만 코로나 사태로 학교가 휴교에 들어간 이후로는 100% 온라인 수업으로 전환했는데, 과제 제출도 포함됩니다. 그래서 현재 학생들은 모두 이메일로 과제를 보내고 있습니다. 이는 행정 업무가 많이 발생하여 매우 비효율적입니다(솔직히 말씀드리면, 파트너는 이런 행정적인 일에는 좀 약한 편이거든요 ;)).

몇 가지 옵션을 논의하던 중 파트너가 이렇게 말했습니다. “토론 주제(topic)에서 사람들이 제 게시물(즉, 주제 작성자의 게시물)과 자기 자신의 게시물만 볼 수 있게 하면 어떨까? 그러면 과제를 주제로 올리고, 각 학생이 아래에 답을 게시하되 다른 학생들의 답은 볼 수 없게 할 수 있겠네요. 그리고 모든 학생이 과제를 제출하고 토론할 때가 되면, 버튼을 한 번 눌러 '베일’을 걷어내어 주제 내의 모든 게시물을 모든 사람이 볼 수 있게 하고, 서로의 작업을 보고 토론하게 하고 싶습니다.”

정말 훌륭하죠! (그래서 제가 그분을 사랑하는 겁니다.)

이 기능을 위한 플러그인을 만들 생각인데, ‘마법 스위치’(주제가 해결(solved) 상태가 되는 순간 모든 것을 보이게 하는) 기능에는 solved 플러그인을 활용할 계획입니다. 하지만 시작하기 전에 여러분의 의견을 듣고 피드백을 얻고자 합니다. 이 기능을 더 좋게 만들 아이디어도 환영합니다.

이를 효율적으로 구현하는 방법에 대한 힌트나 조언도 매우 환영합니다. 주제를 가져오는 방법이 다양하기 때문에, 학생 한 명이라도 이 기능을 우회하는 방법을 찾으면 모든 것이 무의미해지거든요.

주제와 관련된 모든 것이 TopicView를 통해 처리되는 걸까요? username_filters를 활용할 수 있을까요? 아니면 유사한 것을 만들어야 할까요? 아니면 guardian이 더 나은 방법일까요?

여러분의 생각을 들려주세요!

18개의 좋아요

여기서는 어떤 수준의 보안 보장이 필요한지에 따라 크게 달라지지만, 학생들은 꽤 영리할 것이라고 가정하기 때문에 CSS만 사용하는 솔루션은 작동하지 않을 것입니다.

CSS 솔루션이 작동하지 않는다면, 이 아이들은 아마도 악동일 것이고, 부정 행위를 위해 모든 허점을 찾아낼 가능성이 높습니다.

백도어 [quote] 확장이나 기타 온갖 장난이 일어날 수 있습니다. "게시글 보기"에 대한 단순한 패치만으로는 충분하지 않을 수 있습니다.

매우 안전한 방법은 PM(개인 메시지)을 이용하는 것입니다. 학생들이 PM으로 내용을 제출한 후, 완료되면 “클릭” 한 번으로 모든 PM을 해당 주제(topic)로 이동시키면 됩니다. 깔끔하고 … 간단하고 … 안전합니다.

18개의 좋아요

해결책은 업로드 형태인가요, 아니면 컴포저 텍스트인가요?

업로드인 경우, 새로운 Secure Media Uploads를 사용하고, 사용자 다운로드를 위한 임시 URL 생성 방식을 변경하는 플러그인을 적용하여 스태프에게는 ‘적절한’ URL만 생성되도록 하면 작동할 수 있으며 최소한의 변경 사항이 될 수 있습니다. 주제가 해결/태그 지정/닫힌 후 임시 URL은 일반 상태로 복원되어 모든 사람이 모든 것을 볼 수 있게 됩니다.

제출 내용은 보지 않으면서 누가 제출하는지 볼 수 있다는 점도 좋습니다.

8개의 좋아요

피드백과 아이디어를 주셔서 두 분 모두 감사합니다!

문제는 그녀가 동시에 진행 중인 과제 2~3개씩이 있는 6개의 다른 반을 맡고 있어서, 관리해야 할 과제가 약 15개나 된다는 점입니다. 그래서 아마도 그렇게 쉽지는 않을 것 같습니다.

아니요, CSS만으로는 절대 해결되지 않을 것입니다. 확실합니다. 다만, 매일 문제를 패치하는 상황이 아니라면 이 문제가 한두 번 깨지는 것은 큰 문제가 되지 않을 것입니다.

정말 멋진 아이디어입니다. 하지만 대부분 작곡(Composer) 텍스트이고, 그녀도 모든 것을 업로드로 강제하고 싶어 하지 않습니다.

2개의 좋아요

이것이 요청 사항이므로 제목을 수정하겠습니다.

직감이 말하건대, 이것은 스포일러 플러그인에 더 가깝고 다른 것은 아닌 것 같습니다. 스포일러는 주제 소유자만 공개할 수 있도록 해야 합니다.

4개의 좋아요

스포일러를 구현하는 것은 조금 까다로울 수 있습니다. 그렇게 하면 /raw 루트도 보호해야 하니까요.

아래와 같은 방식을 고려해 볼 수 있습니다:

  • 교사가 "왜 인도차이나에서 전쟁이 시작되었는가?"라는 과제를 게시합니다.

  • 학생은 과제 내용을 자신에게 개인 메시지(PM)로 보낸 뒤, 작성을 마치면 해당 PM의 링크를 주제(토론)에 게시합니다. (장점: 수정이 가능하며, 교사에게 불필요한 알림이 가지 않습니다.)

  • 교사는 PM에서 "직접적인 피드백"을 제공할 수 있습니다.

  • 모든 채점이 완료되면 교사가 “게시” 버튼을 클릭하면, PM의 원본 콘텐츠가 복사되어 과제 주제에 있는 PM 링크를 대체합니다.

7개의 좋아요

사람들이 한 해에 여러 번 이 내용을 문의하며, 답변은 항상 "토픽별 권한을 설정할 수 없습니다"입니다. 이 문제를 해결할 수 있다면 상당한 관심이 있을 것이라고 생각합니다.

6개의 좋아요

음, 이 문제는 좀 까다롭네요. TopicView와 PostGuardian을 좀 손보고 있는데, /raw와 인용된 게시물의 번호를 편집하는 트릭을 포함해서 큰 노력 없이 80% 정도는 달성했습니다. 현재로서는 다음 경로들을 통해 보여서는 안 되는 게시물들을 여전히 볼 수 있습니다:

  • 검색
  • 사용자 활동
  • 다이제스트 이메일

그래서 추가 패치가 필요합니다. 지금은 이 정도밖에 떠오르지 않습니다. 게시물에 접근할 수 있는 다른 방법들에 대한 제안은 환영합니다.

4개의 좋아요

여전히 답은 그대로입니다. 솔직히 말해서, 이 질문을 _하는 것 자체_가 질문자가 자신이 무엇을 이루고자 하는지 제대로 생각해보지 않았음을 보여준다고 생각합니다.

다만, 향상된 스포일러 모드는 괜찮다고 생각합니다. 그건 합리적인 것 같습니다.

4개의 좋아요

만약 이 기능이 "일반 사용자가 속삭임 게시물을 작성"하는 방식으로 구현된다면 어떨까요?

2개의 좋아요

누구에게 속삭임인가요? 토픽 소유자라면, 그들을 속삭임에서 강등해야 합니다.

4개의 좋아요

아직 마무리해야 할 세부 사항이 몇 가지 있지만, 이제 작동하는 플러그인을 GitHub - communiteq/discourse-private-replies · GitHub 에 올렸습니다.

플러그인을 설치하고 활성화하면, 주제 소유자(및 스태프)는 각 주제 하단에 Private Replies라는 이름의 추가 버튼이 표시됩니다.

이 버튼은 해당 주제의 ‘개인 답글’ 모드를 켜고 끌 수 있습니다.

개인 답글 모드가 활성화되면,

  • 주제 소유자는 여전히 모든 게시물을 볼 수 있습니다.
  • 다른 모든 사용자는 주제 소유자, 스태프, 그리고 본인이 작성한 게시물만 볼 수 있습니다.

이러한 주제는 주제 상단에 표시되는 배너로 구별할 수 있습니다:

image

주제 소유자가 게시물을 공개하기로 결정하면, 주제 하단의 같은 버튼(이제는 'Public Replies’로 표시됨)을 사용하여 Private Replies 모드를 비활성화할 수 있습니다. 그러면 배너가 사라지고 모든 게시물이 모든 사람에게 표시되게 됩니다(물론 카테고리 보안 설정은 준수됩니다).

이 플러그인은 다음과 같은 게시물 내용 조회 방식을 비활성화합니다:

  • 주제 보기 (즉, 게시물을 보는 일반적인 방법)
  • 사용자 프로필 - 활동
  • 검색
  • 원본 (/raw/topic_id/post_id)

면책 조항 1:

이 플러그인은 누가 주제에 게시물을 올렸는지를 완전히 숨기지 않습니다. 주제 목록의 사용자 아바타는 그대로 유지되며, 주제도 사용자 프로필 - 요약에서 여전히 표시됩니다. 그러나 이 두 가지 모두 게시물 내용을 드러내지 않습니다.

면책 조항 2:

제가 놓쳤을 수 있는 게시물 내용 조회 방식이 있는지 알 수 없습니다. (예를 들어, 다이제스트가 정보를 노출하는지 여부는 아직 테스트해야 합니다.) 제 배우자가 앞으로 몇 주 동안 이 부분을 테스트할 예정이며, 그녀의 학생들이 몇 가지 교묘한 우회 방법을 찾아낼 수 있을 것이라고 의심하지 않습니다. 그런 방법을 알게 되는 대로 즉시 막을 것입니다. 힌트와 팁은 환영합니다!

이번 주 안에 플러그인 카테고리 게시글과 좋은 README.md를 작성할 예정입니다. 그 때까지 여러분의 피드백을 듣고 싶습니다!

9개의 좋아요

이것이 성능에 어떤 영향을 미칠까요? 많은 서드파티 플러그인이 N+1, N제곱, N세제곱, N의 N승 쿼리를 추가하는 경우가 많습니다. 여기서는 그런 문제를 피할 수 있기를 바랍니다.

또한 전역적으로 항상 비용을 치러야 하는 대신, 해당 토픽별로 활성화할 수 있고 활성화된 토픽 외에는 다른 토픽에 대한 성능 영향이 전혀 없으면 좋겠습니다.

7개의 좋아요

가능한 한 효율적으로 유지하기 위해 최선을 다했습니다. 즉, 최대한 지연 평가(lazy evaluation)를 사용하고, 필터에서 최대한 빨리 탈출하도록 했습니다.

스태프의 사용자 ID나 보호된 토픽의 ID를 캐싱하는 것과 같은 작은 최적화 여지는 분명히 있지만, 첫 버전으로서 꽤 잘 했다고 생각합니다. 의견이 다른 분이 있다면, 제 코드를 자유롭게 비판해 주세요.

9개의 좋아요