# 외부 이메일 주소 목록과 그룹 멤버십 동기화

**URL:** https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552
**Category:** Support
**Created:** [5월 16, 2021, 11:08오전 UTC](https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552 "2021-05-16T11:08:23Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![Jonathan5](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonathan5/32/197134_2.png) [@Jonathan5](https://meta.discourse.org/u/Jonathan5)
#### Post date: [5월 16, 2021, 11:08오전 UTC](https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552/1 "2021-05-16T11:08:23Z")

</div>

가장 쉬운 방법은 무엇일까요?

매일 밤 실행되어 Discourse API를 사용하는 외부 스크립트를 만드는 건가요?

아니면 이미 존재하는 플러그인이 있나요?

감사합니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [5월 16, 2021, 1:24오후 UTC](https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552/2 "2021-05-16T13:24:16Z")

</div>

지금 말씀하신 내용은 아마도 문제를 해결하는 최악의 방법일 것입니다. 한 발짝 뒤로 물러서서 문제를 정의해 보실 수 있을까요?

이 목록은 누가 관리하고 있나요? [DiscourseConnect - Official Single-Sign-On for Discourse (sso)](https://meta.discourse.org/t/discourseconnect-official-single-sign-on-for-discourse-sso/13045)가 가능한 해결책 중 하나이지만, 다른 방법도 있을 수 있습니다.

---

<div class="post-metadata">

### Author: ![Jonathan5](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonathan5/32/197134_2.png) [@Jonathan5](https://meta.discourse.org/u/Jonathan5)
#### Post date: [5월 16, 2021, 1:48오후 UTC](https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552/3 "2021-05-16T13:48:58Z")

</div>

컴퓨터 쪽 사람들의 직설적인 표현을 좋아합니다 🙂

비공개 메일링 리스트와 그에 따른 비공개 Discourse 카테고리를 만들어 [Mirroring a read-only mailing list in Discourse](https://meta.discourse.org/t/creating-a-read-only-mailing-list-mirror/77990?u=jonathan5) 를 시도해 볼까 고민 중입니다.

---

<div class="post-metadata">

### Author: ![Jonathan5](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonathan5/32/197134_2.png) [@Jonathan5](https://meta.discourse.org/u/Jonathan5)
#### Post date: [7월 8, 2021, 5:55오후 UTC](https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552/4 "2021-07-08T17:55:56Z")

</div>

> [@pfaffman](#):
>
> 당신의 문제에 대해 아마도 최악의 해결책을 설명하고 있습니다.

가장 좋은 방법은 무엇일까요? 아니면 조금이라도 더 나은 방법은요? 만약 목록에 있는 사람들이 포럼의 비공개 카테고리를 선호한다면, 그것은 Discourse에게 이득이 될 것입니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [7월 8, 2021, 6:54오후 UTC](https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552/5 "2021-07-08T18:54:50Z")

</div>

해당 사용자를 외부 애플리케이션에서 관리하고 있지 않다면 다음과 같은 방법을 사용할 수 있습니다:

```plaintext
  def load_csv(path)
    CSV.parse(File.read(path), headers: true)
  end

  def update_group
   g=Group.find(43) #whatever group ID yo uwant
   GroupUser.where(group_id: g.id).destroy_all
   user_emails=load_csv('/path/to/file')
    user_emails.each do |u|
      user = User.find_by_email(u['Email'])
      next unless user
      puts "found user #{uid}"
      GroupUser.find_or_create_by(group_id: g.id, user_id: user.id)
    end
  end

```

구체적인 구현 방식은 또 다른 문제입니다. 플러그인을 사용하는 것도 방법일 수 있습니다.

예를 들어, 해당 카테고리에 게시물을 작성하면 사용자가 자동으로 그룹에 추가되는 플러그인 같은 것 말입니다.

---

<div class="post-metadata">

### Author: ![Jonathan5](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonathan5/32/197134_2.png) [@Jonathan5](https://meta.discourse.org/u/Jonathan5)
#### Post date: [7월 9, 2021, 8:36오전 UTC](https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552/6 "2021-07-09T08:36:04Z")

</div>

감사합니다.

> [@pfaffman](#):
>
> 카테고리에 게시물을 작성하면 해당 사용자를 자동으로 그룹에 추가합니다.

해당 카테고리는 그룹 멤버에게만 표시되므로, 여기서는 계란과 닭의 상황이 발생하게 됩니다!

PHP에 꽤 익숙해서, Mailman 2에서 이메일 주소를 가져와(해당 Python 스크립트가 있습니다) Discourse 사용자 목록과 대조하고, 필요에 따라 관련 그룹에 Discourse 사용자를 추가하거나 제거하는 스크립트를 작성할 수 있을 것 같습니다. "아마도 가장 나쁜 해결책"이라고 하셨다는 점은 알고 있습니다…

아직 메일링 리스트 미러링도 설정하지 않았기 때문에, 아직은 아이디어 단계에 불과합니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [7월 9, 2021, 9:45오전 UTC](https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552/7 "2021-07-09T09:45:56Z")

</div>

> [@Jonathan5](#):
>
> 해당 카테고리는 그룹 구성원만 볼 수 있으므로, 여기서 계란과 닭의 상황이 발생하게 됩니다!

네, 하지만 목록에 데이터를 다른 방식으로 가져오는 것을 생각하고 있었습니다.

또는 그룹에 요청을 허용하고 discourse가 그 요청을 처리하도록 할 수도 있습니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [7월 9, 2021, 10:28오전 UTC](https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552/8 "2021-07-09T10:28:08Z")

</div>

> [@Jonathan5](#):
>
> PHP에 꽤 익숙해서 스크립트를 작성할 수 있을 것 같다고 생각했어요.

저는 PHP를 싫어해서, 당신의 해결책이 오히려 더 나빠 보일 것 같아요! 😂

하지만 discourse API는 파악하기 꽤 쉬워서, 당신의 해결책이 당신에게 맞는 올바른 선택지라고 생각해요!

mailman에 훅(hook) 기능이 있다면, 구독자 목록이 업데이트될 때 API 호출을하도록 설정할 수 있습니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [7월 9, 2021, 10:40오전 UTC](https://meta.discourse.org/t/sync-group-membership-with-external-list-of-email-addresses/190552/9 "2021-07-09T10:40:16Z")

</div>

“… 목록을 미러링합니다”와 유사한 이름의 카테고리 설정이 도움이 될 수 있습니다.
