다시 답변하기 전에 내 최근 게시물들을 다시 읽어봐 주세요. 관리자는 impersonate나 데이터베이스 접근 없이도 여전히 모든 작업을 수행할 수 있습니다. impersonate와 대부분의 관리자 작업은 이미 로그에 기록되어 있으므로, 다른 관리자가 악의적인 관리자를 추적할 수 있는 기록이 필요합니다.
또는 단순히 Encrypt 플러그인으로 그 공개된 기능을 닫아두는 방법도 있습니다. 결국 사람들이 문제점으로 인식할 수 있는 기능에 대해 선택지를 제공하는 것은 좋은 일입니다. 이는 보안감, 안전감 등에 대한 잘못된 착각을 줄여줄 수 있습니다. Adama의 인용을 빌리자면, 유일한 보안 시스템은 다른 시스템과 네트워크로 연결되지 않은 오프라인 터미널입니다.
찬성과 반대 모두 타당한 관점(PoV)을 가지고 있습니다. 모든 당사자에게 최선의 해결책은 타협입니다. Encrypt 플러그인은 PM/DM 서브시스템에 대한 프라이버시 레이어를 갖추려는 욕구, 그리고 일부에서는 가능한 요구사항을 충족하기 위해 개발되었을 것으로 추정됩니다.
아마도 코어에 옵션으로 포함되지 않는다면, 마음의 평화를 원하는 셀프 호스티드(Self-Hosted) 시스템 사용자를 위해 원하는 효과를 달성하는 플러그인 형태가 될 수 있을 것입니다.
커스텀 배지를 만드는 스크립트는 관리자에게만 직접 접근 권한이 있으므로 비활성화할 필요가 없다고 말할 수 있습니다. 그러나 이는 Root에서 활성화해야 합니다. 만약 이것이 변경되지 않았다면요.
완벽한 이상적인 상황이라면, 사람들은 직분에 있는 사람들을 신뢰할 수 있어야 한다고 동의합니다. 불행히도 신뢰는 때때로 잘못 놓여지고, 오해가 발견되었을 때 비로소 그 진상이 드러나는 법입니다.
‘소유권 변경’ 또는 '게시물 편집 후 수정 이력 숨기기’와 같은 실용적인 예시들을 가지고 이 기능이 impersonate 버튼을 건드리지 않고도 마치 본인이 말하지 않은 것을 말한 것처럼 보이게 만드는 방법에 대해 주로 무의미한 논쟁임을 보여줄 수 있을지 고민해 봤습니다. 하지만 결국 그걸 하지 않기로 했습니다.
하지만 UI에만 있는 마법 같은 버튼들만으로도, 하물며 rails 콘솔을 가지고 노는 것까지 포함하면, 제가 정말로 악랄한 짓을 할 수 있는 방법은 분명히 몇 가지 이상 있습니다. 저는 이러한 기능들이 TL4/카트모드/모더레이터 레벨에서도 사용 가능하기 때문에, 이 문제는 관리자뿐만 아니라 커뮤니티의 신뢰에 크게 달려 있다고 생각합니다. 일반적으로 ‘스태프’ 그룹은 자신의 커뮤니티에 대한 자해 행위이기 때문에, 이러한 도구들을 파괴적으로 사용하려고 애쓰지 않는 경향이 있다고 봅니다.
진심으로 말하지만, 남용과 기타 문제를 주장하는 이러한 모든 댓글들은 저에게 전혀 합리적이지 않습니다. 이 특정 기능을 비활성화할 이유가 전혀 없습니다. 다른 분들이 지적했듯이 관리자는 여전히 모든 것을 수행할 수 있습니다.
하지만 여전히 다른 사람들의 말을 듣지 않으려 하고, 없는 문제를 만들고 있습니다. 여전히 무엇이 정말로 문제인지 이해할 수 없습니다. 사용자를 잃을까 걱정되나요? 아니면 다른 관리자가 이 기능을 이용해 당신에게 해를 끼칠까 두려운 건가요? 그렇다면 그렇게 간단하게 당신이 신뢰하지 않는 사람을 관리자로 만들지 말아야 합니다.
Richard, 솔직하게 말씀드리겠습니다. 당신과 @merefield님은 매우 타당하고 긍정적인 사용 사례를 제시하고 계십니다. 하지만 두 분 모두 선택적 설정을 가진 요소들을 변경하는 것이自己的工作 흐름을 방해할 수 있다고만 보고 있는 것 같습니다. 실제로는 그렇지 않을 것입니다. 호스팅을 제공하는 경우 두 분 모두에게 해당 기능이 변경되지 않으므로요.
예를 들어, 금전적 보상 또는 프로 보노(pro bono)에 대한 합의가 필요한 문제를 게시해서 도움을 요청하는 경우가 있습니다. 도움을 제공하는 당신이나 Robert, 혹은 그 누구도 자체 호스팅된 Discourse에서 필요한 도구를 나열할 수 있습니다.
예를 들어, “Dan, 당신의 문제를 해결해 주는 대가로 $X를 받고 싶습니다. 이를 위해 다음이 필요합니다. 당신의 사이트에 계정을 생성하고 관리자 권한을 부여해 주십시오. 또한 문제를 적절하고 효율적으로 진단하고 수정하기 위해 Impersonate(특정 사용자 목록에 대해 이 기능을 사용할 수 있도록 허용)에 접근할 수 있어야 합니다. 만약 Impersonate가 비활성화되어 있다면 루트 관리자(root admin)가 이를 활성화해 주어야 합니다. 제 조건에 동의하시면 이 과정을 시작할 수 있습니다.”
저에게는 이것이 핵심입니다. 관리자는 다른 사용 가능한 도구를 통해 여전히 사용자를 ‘위장’할 수 있으며, 이는 문자 그대로 몇 번의 클릭 거리입니다.
하지만 결국 Discourse는 플러그인 시스템을 갖춘 오픈소스 프로젝트이므로, 자신의 커뮤니티에 가장 적합하다고 생각하는 방식으로 기능을 조정할 수 있습니다.
플러그인이 필요하다면, Guardian.can_impersonate?를 오버라이드하는 것부터 시작하는 것이 좋습니다. 이 메서드는 Impersonate 버튼의 존재 여부를 결정하는 직렬화기(serializer)와 백엔드 체크 모두에서 사용됩니다. 제 개발 인스턴스에서 간단한 테스트를 해본 결과, 잘 작동했습니다:
# plugin.rb
after_initialize do
class ::Guardian
def can_impersonate?(target)
false
end
end
end