Ballotage – 秘密黑白球投票


功能

这属于比较小众的功能……但是:许多俱乐部、协会和会所通过黑白球秘密投票来接纳新成员。此插件将该流程引入 Discourse:

  • 位于 /ballotage 的投票页面,配置好的组成员可在设定时间段内(默认为开始日 00:01 至结束日 23:59,可选自定义时间)投出最终一票——黑球或白球。
  • 位于 /ballotage/manage 的管理页面,供监督组和管理员使用:在投票进行期间查看谁已投票,投票结束后查看黑白球结果。
  • 投票可以取消,然后定稿(结果和参与者列表将被不可逆地删除),最后从列表中移除。
  • 一次仅允许一个投票,投票页面可选显示通知文本,内置英语和德语。

投票如何保持秘密

  • 数据库存储谁投了票(不记录选择,不记录时间戳)以及两个匿名计数器——没有任何信息将成员与其选择关联起来。计数器递增时不会触及 updated_at 字段。
  • 计数在投票结束前保持隐藏:如果在参与者列表旁显示实时计数,观察者可能会将新出现的名字与刚刚变动的计数器对应起来。
  • 定稿操作会永久删除结果和参与者列表。

局限性:如果有人拥有直接数据库访问权限,并在投票进行期间监视计数器,仍有可能关联投票。这超出了插件的能力范围,需要通过组织层面的措施来处理。

配置

设置 描述
ballotage_enabled 启用插件
ballotage_voting_group 允许投票的组
ballotage_oversight_group 可查看参与情况和结果的组(管理员始终可以)
ballotage_oversight_can_manage 允许监督组创建、取消、定稿和删除投票
ballotage_info_text 显示在投票页面上的可选通知文本
ballotage_timezone 开始/结束时间的时区(默认 Europe/Berlin)

在侧边栏或菜单中添加指向 /ballotage 的链接,以便成员找到投票页面。

兼容性

Discourse 2026.7 及更高版本。自 2026 年 9 月起已在小型论坛的生产环境中运行。

欢迎反馈、错误报告及翻译——请在此处或 GitHub 上提出。

3 個讚