先说结论
徽章系统一旦没人管,很快就会沦为“互相送礼物”的表面互动。Odoo 在 Badge 里最值得看的不是 UI,而是它怎么判断谁能发、发之前需要拥有什么、一个月最多能发多少。
第一层:授权规则为什么要分 everyone、users、having、nobody
rule_auth 的四种模式其实在回答四种治理问题:是否全员可发、是否只允许指定人、是否必须先拥有某些徽章、是否根本不开放人工发放。这不是表单字段太多,而是荣誉体系必须先定义“授权来源”。
第二层:前置徽章机制到底在防什么
当 rule_auth == having 时,_can_grant_badge() 会检查当前用户是否已经拥有要求的徽章。这个设计很像“导师资格”或“资深员工资格”的隐式建模:不是每个人都能认证别人,必须先被体系承认。这样能有效降低互刷荣誉的可能。
第三层:月度限额为什么和权限同等重要
rule_max、rule_max_number 和 stat_my_monthly_sending 配合后,_remaining_sending_calc() 才能算出当前用户还剩多少发放额度。也就是说,就算你有资格发,也不代表你能无限发。权限解决的是“能不能”,限额解决的是“能发多少”。
第四层:为什么系统还要统计 granted_count 与 unique owners
徽章不是简单的一次性动作,后续还要看总授予次数、覆盖的独立用户数、当前月数据等。否则你很难判断一个徽章到底是稀缺认可,还是已经泛滥。源码里的统计字段,本质上是在给激励治理提供仪表盘。
第五层:这套机制最适合哪些场景
当你想用徽章鼓励分享、审核、知识沉淀、培训辅导时,这套机制尤其有价值。因为这些事情既需要社交激励,又怕被滥发稀释。Badge 的治理层,就是在这两者之间做平衡。
最容易误解的三个点
- 误区一:徽章越容易发越能活跃社区。短期可能热闹,长期往往会失去公信力。
- 误区二:有权限就不用限额。实际中最容易失真的是“有权限的人发太多”。
- 误区三:统计只是展示。没有统计,你就无法治理徽章稀缺度。
实战上怎么用更稳
- 设计徽章时,先想清楚它是开放鼓励型,还是资格认证型。
- 涉及晋升、导师、评审等角色时,优先考虑
having模式。 - 如果某个徽章价值高,别忘了同时设置限额,而不只设置授权人。
最后总结
徽章系统的难点从来不是发出去,而是发出去之后还能不能被信任。Odoo 把授权、前置资格和限额放在一起,正是在守住这条底线。
DISCUSSION
评论区