如何为在线课程构建 Discourse 结构?

@dax 2020 年仍然无法将话题中的帖子限制为仅限发帖人所在组的用户查看吗?

我们希望在在线学习系统中使用 Discourse……我们想要设置大约七个话题,让不同的用户群组(组)依次完成,这样他们只能看到自己组内的帖子。我们更倾向于使用同一组话题,而不是为每个新群组重复创建相同的话题。

或许在此期间已有其他新功能可以实现这一目标?感谢任何建议。

2 个赞

抱歉,您的问题表述不清且似乎无关。

您可以创建分类,分类可以通过用户组进行权限控制。

@HappyGezim 所请求的是话题内的自定义“悄悄话”功能,目前这不在我们的开发路线图中。

@sam 感谢您的快速回复!我将尝试结合我们的具体场景进行说明:

  • 我们已设置了四个分类,分别对应我们提供的四门课程。

  • 在每个分类(课程)中,我们大约有 5 到 10 个主题,每个主题对应课程中的一节“课程”……此外还有一些额外的主题,如“技术问题”、“自我介绍”等。每节课程发布时,学生会被要求对相关主题进行贡献。

  • 我们将有多批学生陆续参与这些课程,希望将某个主题内的帖子限制为仅该批次“小组”可见。这样我们可以保持分类和主题不变,只需修改用户属性将其分配到不同的小组即可。我们是否可以通过 API 创建这些小组,并动态地将学生分配进去?

这就是促使我提出上述核心问题的背景:“在特定主题内,我是否可以创建一条仅对属于特定小组的用户可见的消息?”

1 个赞

Daniel,我也可以通过 Discourse 运行一门课程。我使用一个类别加子类别的方式,这样最容易进行权限限制。

类别:Acme 课程
子类别:2020-05 - 课程讨论

特定班次的学生只能看到一个子类别。

这并非完美方案,但确实有效!

2 个赞

@waffleslop 太棒了,谢谢。你每次有新批次时都是手动创建这些子分类吗?(或者通过 API 实现?)

我希望能避免这种情况,因为每个批次我都得在子分类中设置相同的 5 到 10 个新话题。我们可能还会同时有多个批次在进行同一轮课程,这意味着我需要在命名上动些脑筋。所以基于你的例子……
2020-05-cohort-A 课程讨论
……或者有没有办法创建子子子分类?我还没研究过这个。

再次感谢你的建议。

3 个赞

将这些分类设置为只读。

当有新班级时,请为该班级创建一个新的分类。让学生点击 :link: 图标,然后选择“新建主题”,在该班级分类中为作业创建新主题。我为每项作业添加了作业标签,以便更轻松地追踪是否有人完成以及何时完成。我还创建了徽章,当“点赞”他们的主题时会自动授予,甚至编写了一个脚本来批量处理这些操作,生成 CSV 文件,并上传到我原本不想使用的大学学习管理系统(LMS)中。

3 个赞

@pfaffman 感谢您的反馈。

我原本的想法是使用子分类来将课程下的 cohorts 进行分组,但在创建子分类时,我在 UI 中看到了以下内容:

我理解这是否意味着无法使用子分类来将 cohorts 分组到课程下,然后通过组权限将它们限制在该子分类中?@waffleslop 您的方法中是否成功实现了按子分类进行限制?也许我对这条 UI 消息的理解有误。

如果您无法将子分类限制为某个组,@pfaffman,我认为您的方法(感谢您的解释)——即为每个 cohort 创建一个新分类——可能是唯一可行的方案。

由于我们每个课程中的 10 个左右主题已经非常固定,具有特定的命名和编号等,我打算在系统中创建新 cohort 时,通过 API 来创建这些主题。因此,每当在我们的 LMS 中创建一个新 cohort 时,我将使用 API 执行以下操作:

  • 为该 cohort 在 Discourse 中创建一个新分类
  • 在 Discourse 中创建一个新组,并赋予其访问该分类的权限
  • 在新分类中创建正确的 10 个左右主题
  • 每当有学生被添加到我们的 LMS 中的某个 cohort 时,将他们添加到 Discourse 中对应的组(如果他们离开,则将其移除)

您是否尝试过这种方法,而不是依赖学生自己创建主题?我在想,不同学生可能会为课程中的同一项作业创建名称略有不同的主题。

关于您建议使用“只读分类”来解决这个问题的某个方面,我还有些不太清楚。

非常感谢您花时间写下这些想法!

2 个赞

格式如下:

类别:Acme 课程
群组:2020-01_cohort、2020-05_cohort

子类别:

  • 2020-01 - 课程对话(群组:2020-01_cohort)
  • 2020-05 - 课程对话(群组:2020-05_cohort)
3 个赞

啊,明白了。谢谢 @waffleslop。好的,你的意思是确实可以将子类别限制在特定群组内,从而禁止访问其他子类别。我刚才误解了上面复制的那条界面提示信息。:zipper_mouth_face:

因此,我们接下来的方案很可能是通过 API 来实现以下操作:

  • 为每个 cohorts 在 Discourse 中创建一个新的子类别
  • 在 Discourse 中创建一个新群组,并赋予其访问该子类别的权限(根据上面的界面提示,同时也包括父类别)
  • 在新子类别中创建大约 10 个正确的主题帖
  • 每当有学生被加入我们的 LMS 中的某个 cohorts 时,将其添加到 Discourse 中对应的群组(若学生离开则将其移除)
2 个赞

我相当确定父类别可以设为只读,而子类别仅限制给特定组。

你可以做到,但这样你需要(并且需要维护,除非你第一次就做得完美)只创建一次包含说明的只读类别;而在创建 cohort 时,你只需创建那一个子类别。

我想这就是为什么我使用了标签。他们会用作业标签来标记主题,这样主题名称可以具有描述性;即使他们选了一个很糟糕的名称,也不会造成任何问题。

4 个赞

对于采用上述方法的人——即为每个课程“批次”使用子类别并在每个子类别中重复讨论主题——请确保启用“允许重复主题标题”设置,否则 Discourse 将不允许在每个子类别中重复相同的主题。

2 个赞

这也是我喜欢我的解决方案的部分原因:创建一个只读的单一类别来存放内容,并让学生们在特定于班级的类别中就该内容发起新的讨论话题。

4 个赞

你好,@Daniel_McQuillen。我很好奇你的课程进展如何。我正计划开设三门课程,每门课程包含多个批次,因此很想了解你目前的经验。

另外,你是否会过期某些课程或讨论区的访问权限?

提前感谢你的分享,Hunter

4 个赞

你好 Hunter,

我们目前处于测试阶段,Discourse 集成进展顺利。我们使用 SSO 集成来强制用户在我们的网站上登录。这一直运行良好,但我注意到以下两点:

  1. Discourse 不接受包含“@”符号的用户名……它会将用户名截断为“@”之前的第一部分。如果后续在调用 Discourse API 时使用该用户名作为参数,可能会引发问题。Discourse 无法识别类似 someone@example.com 的用户名,因为在 Discourse 中,该用户的用户名被存储为"someone"。解决此问题的简单方法是在你自己的用户名中禁止使用“@”符号!

  2. 当有人在你的网站上注册时,你必须显式调用 Discourse API 来同步 SSO 用户。因为你可能希望在该用户首次访问 Discourse 网站(这将自动同步 SSO)之前,对其执行某些操作(例如将其添加到 Discourse 群组)。我使用的是基于 Django 的网站,因此我使用了 pydiscourse 库,其中有一个 sync_sso 方法,可以非常方便地完成此操作(Client Challenge

是的,我们将使部分课程过期。在这种情况下,服务器会调用 Discourse API,将该用户从该课程的通用群组以及该课程中与其班级(cohort)对应的专属群组中移除。

我已在 Django 网站中创建了表,用于跟踪这些“课程”群组以及每个课程内的各个“班级”群组。因此,在添加或移除学生等操作时,我会利用这些信息:

2 个赞