企业 知识库侧边栏

Odoo 企业版知识库收藏为什么不是“点个星标就能排好目录”:favorite resequence、sidebar hierarchy 与可见性过滤讲透

基于 knowledge 源码,讲清收藏、侧边栏层级、私有副本与可见性过滤为何是一整套知识导航机制,而不只是星标功能。

企业 协同办公
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 3 阅读

很多用户觉得 Knowledge 的收藏只是一个“星标列表”。但 enterprise/knowledge/models/knowledge_article.pyknowledge_article_favorite.py 告诉我们:收藏、侧边栏、可见性、私有副本,其实构成了一整套“我该先看到什么、还能不能继续看到子树”的导航系统。

一、收藏开关只要求读权限,但写入要 sudo

action_toggle_favorite() 明确写着:只要有 read access,就允许切换自己的 favorite 状态;但真正写 favorite_ids 时又要 sudo。这一设计很巧妙:用户不需要拥有文章写权限,也能管理自己的阅读入口;与此同时,又不会借此获得修改文章本身的能力。

这说明收藏本质上是“用户视角的入口偏好”,不是“文章对象的共享属性”。

二、收藏顺序要单独维护,不然目录永远乱

knowledge_article_favorite.pycreate() 会自动给 favorites 补 sequence;resequence_favorites() 则按用户提交的文章顺序重新写 sequence。源码还专门考虑了“某些文章后来不再可访问”的情况,避免排序时直接爆权限错误。

这背后的业务逻辑是:收藏不是简单集合,而是用户自己的知识工作台。既然是工作台,就必须支持个人排序,而不是只能按更新时间或字母序。

三、侧边栏不只是根文章树,还会混入当前上下文和收藏

get_sidebar_articles() 的注释写得很详细:它会返回可见根文章、当前用户收藏、当前文章、当前文章祖先,以及已展开节点的子文章。也就是说,Knowledge 侧边栏从来不是静态目录树,而是“目录树 + 当前工作上下文 + 个人常用入口”的混合体。

这也是为什么很多人觉得 Knowledge 好用:它不是逼你在纯树形目录里钻来钻去,而是把“我现在正在看什么”“我常看什么”“这个节点上面还有什么”同时呈现出来。

四、私有副本和移入垃圾箱都会影响导航可见性

action_make_private_copy() 会复制文章、复制成员关系和属性定义,再把内容落到用户私域;action_send_to_trash() / _action_archive_articles() 则会处理可写后代、不可写后代的脱钩,并通过 _send_trash_notifications() 给不同伙伴发不同可见范围的通知。

这说明知识库导航不是简单的树结构维护,而是与权限和归属关系深度耦合:文章一旦从共享变私有,或者进入垃圾箱,谁还能在侧边栏看见、谁会收到通知,都会变。

五、实战注意事项

  1. 把收藏看作个人导航层:它不应该承载团队共享结构。
  2. 共享目录与私有副本要区分清楚:私有副本适合个人加工,不适合替代原文。
  3. 别忽略 sequence:一旦收藏排序失控,用户会觉得知识库“越来越难找”。
  4. 删除共享文章前先看通知影响:垃圾箱通知是按权限分发的,误删会造成多人噪声。

新手误区

  • 误以为收藏只是一个布尔值。
  • 误以为侧边栏只显示目录树。
  • 误以为私有副本只是复制一份正文。
  • 误以为把文章拖进垃圾箱不会影响其他人的入口。

主要源码参考

  • enterprise/knowledge/models/knowledge_article.py
  • enterprise/knowledge/models/knowledge_article_favorite.py

DISCUSSION

评论区

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