익명 모드에서 사용자를 그룹에 자동으로 추가할 수 없습니다

여러분 안녕하세요!

저는 Discourse 2.6.0beta3로 포럼을 운영하고 있으며, 버그를 발견한 것 같습니다.

특정 카테고리에서의 게시물을 제한할 수 있도록匿名用户(anonymous users)를 anons라는 그룹에 추가하려고 합니다. 이메일 도메인 anon.mydomain을 기준으로 사용자를 자동으로 해당 그룹에 추가하도록 그룹 anons를 설정했습니다.

익명 모드에 진입하면 제 익명 계정이 해당 그룹에 추가되지 않았습니다. 하지만 /g/anons/manage/membership 페이지에서 Save Change(변경 사항 저장) 버튼을 클릭하면 제 익명 계정이 이 그룹에 추가됩니다. 저는 버튼을 클릭하지 않고 익명 모드에 진입할 때만 자동으로 익명 사용자를 이 그룹에 추가되기를 원합니다.

이 버그에 대해 검색해 보았지만 유용한 정보를 찾지 못했습니다. 읽어 주셔서 감사합니다!

1개의 좋아요

사용자가 익명 모드를 활성화할 때 발생하는 문제를 재현할 수 있습니다. 익명 이메일 도메인을 기준으로 사용자를 자동으로 특정 그룹에 추가하려면, 익명 그룹의 관리 페이지로 이동하여 설정을 저장해야 합니다.

익명 이메일 도메인을 기준으로 익명 사용자를 그룹에 추가하는 기능이 의도된 동작인지 확실하지 않습니다. 모든 익명 사용자를 하나의 그룹에 모을 수 있다면 유용할 것 같습니다. 익명 사용자의 이메일 도메인을 기준으로 그룹에 추가하는 방식은 Meta에서 몇 번이나 제안된 바 있습니다. 대안으로, anonymous mode group 설정을 추가하여 모든 익명 사용자를 선택한 그룹에 자동으로 추가하는 방식을 고려해 볼 수 있습니다.

이것이 버그인지 여부를 결정하기 전에, Discourse가 이 기능을 지원하기를 원하는지 먼저 확인해 보겠습니다.

3개의 좋아요

이 기능을 위해 익명 이메일에 의존하는 것은 위험할 것 같습니다. 익명 사용자를 위한 별도의 자동 그룹을 만들어 해당 사용자를 자동으로 추가하는 방안을 고려해 볼 수 있습니다.

다만, 이는 버그라고 생각하지 않으므로 카테고리를 변경합니다.

3개의 좋아요

안녕하세요, 이 주제가 제가 세팅/관리하는 포럼에서 겪고 있는 문제와 관련이 있습니다. 배경을 설명드리자면, 이 포럼은 게시글을 작성할 수 있는 사용자로 가입하려면 비용을 지불해야 합니다. 또한, 특정 신뢰 수준(trust level)을 갖춘 유료 회원이 익명 모드로 전환하여 익명으로 게시글을 작성할 수 있도록 하려는 계획도 있습니다. 아울러 스태프 전용 내용과 같은 예외를 제외하고, 모든 사람이 콘텐츠를 읽을 수 있도록 하고 싶습니다.

제 이해로는, 익명 사용자가 자동으로 ‘everyone’ 사용자 그룹에 포함된다고 알고 있습니다. 만약 포럼에서 전 세계 누구나 게시글을 작성할 수 있도록 한다면, 익명 사용자가 게시글을 작성할 수 없는 문제는 발생하지 않을 것입니다. 하지만 이 포럼은 유료 포럼이기 때문에, 전 세계는 읽기만 가능하고 작성은 불가능하도록 ‘everyone’ 사용자 그룹을 읽기 전용(read-only)으로 설정해 두었습니다.

그럼에도 불구하고, 필요한 신뢰 수준을 갖춘 사용자가 익명으로 게시글을 작성할 수 있도록 하려는 것입니다. 원래 계획했던 해결책은 게시글 작성 권한이 있는 익명 사용자 그룹을 만들고, 포럼에서 사용하는 익명 이메일 도메인에 기반하여 사람들을 추가하는 것이었습니다. 하지만 자동 추가 기능이 작동하지 않고 있습니다 - 실제로 익명 사용자가 추가되려면 관리자가 익명 사용자 그룹에 들어가서 변경 사항을 저장해야 합니다. 이는 꽤 번거롭고, 우리가 원하는 흐름을 방해합니다. 우리가 원하는 것은 필요한 신뢰 수준을 갖춘 유료 회원이 익명 모드로 전환한 후, 익명 게시글 작성을 자유롭게 할 수 있는 것입니다.

익명 사용자가 자동으로 그룹에 추가되는 기능은 Discourse에 추가될 가능성이 고려되고 있지만 아직 구현되지 않은 것으로 보입니다. 만약 그렇다면, 제가 원하는 결과를 얻기 위해 Discourse를 구성할 다른 합리적인 방법이 있을까요, 아니면 이 기능이 추가되기를 Discourse 개발팀에 기대하며 기다려야만 할까요? 감사합니다 :slight_smile:

섀도우가 생성될 때 사용자의 모든 그룹을 해당 섀도우에 복사하는 플러그인을 작성했습니다:

면책 조항: 저는 루비(Ruby)에 완전히 초보이며, 제 설치 환경에서는 작동하지만 다른 환경에서도 작동하는지는 알 수 없습니다.

2개의 좋아요

이 기능에 +1입니다. 실제로 구현된 적이 있나요? 제가 보기에는 없는 것 같은데. 아니면 이 기능을 수행하는 플러그인을 아시는 분이 계신가요?

(참고: 이 글을 찾았는데, 꽤 괜찮은 우회책인 것 같습니다.)

내 사용자 중 한 명이 익명 계정이 자동으로 포럼 그룹에 추가되도록 플러그인을 만들어 주었습니다. 제가 현재 사용 중인 GitHub 포크입니다: GitHub - curi/cf-anon-auto-group: Discourse plugin to trigger `user.set_automatic_groups` for anons on login · GitHub 지금까지 잘 작동하고 있습니다.

이것을 통해 사용자들이 아무 내용이나 게시할 수 있도록 적절한 권한을 부여해야 합니다.

다른 분들도 이 해결책을 사용할 수 있거나, 누군가 더 공식적인 플러그인을 만들거나 코드를 통합하는 방법을 알아낼 수 있을 것입니다.

이것은 이메일 기반의 자동 그룹 가입 설정과 함께 작동합니다(우리의 경험상 이 설정만으로는 작동하지 않았습니다):

참고로, 저는 이 문제를 제가 운영하는 포럼에서 데이터베이스 레벨에서 "해결"했습니다. 다른 더 고수준의 솔루션을 사용할 수 없는 경우에만 이 방법을 사용하세요. (이 문제에 대해 어떤 진전이 있었나요, 아니면 기존 답변 중 하나를 "해결됨"으로 표시해야 하나요?)

다음은 PostgreSQL 코드입니다:

create or replace function anon_insert_copy_groups_to_anon_user()
  RETURNS TRIGGER 
  LANGUAGE PLPGSQL
  AS $$
declare
  anon_user_id integer = new.user_id;
  master_user_id integer = new.master_user_id;
  active boolean = new.active;
  created_at timestamp = new.created_at;
  updated_at timestamp = new.updated_at;
BEGIN
  insert into group_users 
        (group_id,                user_id,       created_at,        updated_at,        owner, notification_level,     first_unread_pm_at)
  select group_users.group_id, anon_user_id , current_timestamp, current_timestamp, false, 3 as notification_level, current_timestamp
  from group_users 
  where group_users.user_id=master_user_id
  and   group_users.group_id not in (select group_id from group_users where group_users.user_id=anon_user_id)
  and   group_users.group_id not in (1, 2, 3); -- 관리자, 모더레이터, 스태프 제외!

  return new;
end;
$$;

-- 트리거 생성
CREATE TRIGGER anon_insert_trigger
AFTER INSERT ON anonymous_users
  FOR EACH ROW
    EXECUTE FUNCTION anon_insert_copy_groups_to_anon_user();