先说结论
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 明确区分了两件事:
- 你有没有资格提交内容;
- 你提交的内容要不要立刻公开展示。
这正是社区产品里很常见的“准入”和“公开”分层。
所以发不发得出去、发出去后是不是马上 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_post、can_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_dofollow、karma_editor 和 pending 审核链路
这往往比只加验证码更有效。
一句话记忆
Odoo 论坛不是“谁登录谁发帖”,而是“用 karma 决定谁能创作、谁能修改、谁能治理、谁能获得更强表达能力”的社区信任系统。
DISCUSSION
评论区