网站论坛

Odoo 论坛为什么不是“谁都能发帖”:karma、审核、nofollow 与社区信任边界讲透

很多人把 Odoo 论坛当成简单问答页,但 website_forum 实际把发帖、回答、编辑、关闭、删帖、链接能力和个人简介展示都绑在 karma 与社区信任模型上。

网站
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

先说结论

Odoo 的论坛模块,从来不是“登录了就能自由发、自由改”的轻量留言板。

website_forum/models/forum_post.py 里的设计很明确:

  • 用户不是只有“能发 / 不能发”两挡;
  • 帖子也不是只有“显示 / 隐藏”两挡;
  • 系统会根据 karma、是否作者、是否管理员、帖子状态和内容风险,逐层决定你能做什么。

所以 Odoo 论坛更像:

一个用 karma 驱动的社区信任系统,而不只是网站上的问答页面。

这也是为什么它明明是 website 模块,却做了大量权限与审核设计。


一、为什么 karma 不是装饰积分,而是操作权限表

_compute_post_karma_rights() 会集中算出一大组门槛和布尔权限,包括:

  • 能不能提问 can_ask
  • 能不能回答 can_answer
  • 能不能采纳 can_accept
  • 能不能编辑 can_edit
  • 能不能关闭 can_close
  • 能不能删帖 can_unlink
  • 能不能赞/踩 can_upvote / can_downvote
  • 能不能评论、转评论、审核、使用完整编辑器等

而且很多门槛还区分:

  • 自己的帖子;
  • 别人的帖子。

这说明 karma 在 Odoo 论坛里不是成就展示,而是:

  • 一张动态权限表。

也就是说,社区等级不是 UI 装饰,而是真正改变权限边界的业务变量。


二、为什么“能发帖”和“发完立刻公开”不是一回事

create() 里,源码会先检查:

  • 问题是否已关闭/删除;
  • 当前用户 karma 是否足够提问或回答;
  • 如果是发新问题但还达不到 can_post,会把状态设成 pending

这个细节很重要。

因为它说明 Odoo 明确区分了两件事:

  1. 你有没有资格提交内容;
  2. 你提交的内容要不要立刻公开展示。

这正是社区产品里很常见的“准入”和“公开”分层。

所以发不发得出去、发出去后是不是马上 visible,不一定是同一个开关。


三、为什么编辑、关闭、删帖都不是通用权限

write() 里对不同字段做了非常细的人工安全校验。

例如:

  • 关闭 / 重开帖子,需要满足 can_close
  • flag 需要满足 can_flag
  • 删除 / 恢复需要满足 can_unlink
  • 采纳答案需要满足 can_accept
  • 改标签还要额外过 karma_edit_retag
  • 只要改动的字段超出受信字段集合,就要过 can_edit

这说明 Odoo 论坛不是一个“拿到写权限就能全改”的模型,而是:

  • 按动作拆分权限。

这比普通 CMS 的帖子编辑逻辑细很多,也更接近成熟社区产品。


四、为什么链接和图片会跟 karma 绑定

_update_content() 特别值得注意。

如果用户 karma 低于 karma_dofollow,系统会把内容里的链接改成:

  • rel="nofollow"

如果低于 karma_editor,带链接、图片或带背景图样式的内容还可能直接被拒绝。

这背后的社区思路非常清楚:

先控制内容风险,再逐步放开表达能力。

也就是说,Odoo 不是一刀切禁止低等级用户发言,而是:

  • 先允许基础表达;
  • 再按信任度逐步放开外链、图片和高级编辑能力。

这非常适合防垃圾、SEO 滥用和低质量外链污染。


五、为什么论坛里的“可见”本身也是权限问题

源码里不仅有 can_postcan_edit,还有 can_view

_search_can_view() 甚至直接走 SQL,去判断:

  • 帖子是不是自己发的;
  • 作者 karma 是否大于 0;
  • 帖子是否 active;
  • 当前用户是否有足够高的关闭/审核级别。

这说明在 Odoo 论坛里,“能不能看到这条内容”本身也是受信任模型的一部分,而不是永远对所有人完全公开。

所以社区运营时,你不能只想“怎么让用户多发”,还要想:

  • 什么内容应该公开;
  • 什么内容应该待审;
  • 什么内容应该只对更高信任角色可见和可处理。

六、为什么采纳答案不仅改状态,还会回写 karma

write() 里,如果 is_correct 发生变化,系统还会:

  • 给被采纳回答的作者加 karma;
  • 给执行采纳的人加/减 karma;
  • 删除已采纳回答时还会反向扣回 karma。

这说明“采纳答案”在 Odoo 论坛里不是一个视觉标签,而是:

  • 社区激励系统的一部分。

也就是说,好的内容不只是被标记出来,还会进一步改变用户的未来权限能力。

这就形成了典型的正反馈飞轮:

  • 贡献高质量内容
  • 获得更高 karma
  • 解锁更多社区能力
  • 继续承担更高质量治理角色

七、最容易误解的 5 件事

1. 以为 karma 只是积分展示

不对。它直接决定大量动作权限。

2. 以为能发帖就会立刻公开

不对。还可能进入 pending

3. 以为编辑权限是统一的

不对。关闭、删帖、采纳、改标签都有独立门槛。

4. 以为低 karma 用户只是不能发图

不对。外链可能被 nofollow,严重时链接/图片直接不允许。

5. 以为论坛内容都是天然公开

不对。可见性本身也受 trust model 影响。


八、实战运营最该注意什么

1. 不要把论坛当博客评论区来配

论坛是社区系统,不是简单留言板。

2. 设计 karma 阈值时,要把“创作、编辑、治理”三类能力分开想

否则要么太松,要么太死。

3. 如果社区垃圾内容变多,优先检查 karma_dofollowkarma_editor 和 pending 审核链路

这往往比只加验证码更有效。


一句话记忆

Odoo 论坛不是“谁登录谁发帖”,而是“用 karma 决定谁能创作、谁能修改、谁能治理、谁能获得更强表达能力”的社区信任系统。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。