思源笔记的发布服务是相对其他本地化笔记来说的一个亮点,其带来了其他本地化笔记稀缺的一个属性:分享。我之前也经常写博客分享,但是每次写完发布到现有平台或者静态博客生成器时总是会出现格式错误等文档,属实闹心。从开始使用思源笔记起,我就计划着把它的发布服务利用上,用于发布我的博客。然而,目前的发布服务会将所有的笔记本和文档都发布出去,带来信息泄露的恐慌。至少对我来说,我是不敢把所有文档都发布出去的,于是至今,我的新博客也未能建成。
6 月份的时候,我趁着有活动,购买了一年的云服务器,计划着为新博客预备。然而三个多月过去了,新博客还一点动静都没有。于是趁着国庆假期,我也抽了几天开始试图自己开发一个发布增强插件,用于实现自定义发布。做一半的时候才意识到插件的方案无论如何都会有数据泄露的风险,还是得从官方入手。于是我 clone 了源码,为思源贡献了一个新功能:发布访问控制( Pull Request #16041 · siyuan-note/siyuan )。
功能
- 每个文档和笔记本都可设置 公开/保护/隐藏/私密/禁止 这五种权限
- 公开:文档树中可见,内容可被搜索,可直接访问
- 保护:文档树中可见,内容不可被搜索,访问时提示输入密码
- 隐藏:文档树中不可见,内容不可被搜索,可直接访问
- 私密:文档树中不可见,内容不可被搜索,访问时提示输入密码
- 禁止:文档树中不可见,内容不可被搜索,访问时提示禁止访问
- 发布服务里,设置为不可见(隐藏/私密/禁止)的文档/笔记本及其下属的所有文档不会出现在文档树、标签、书签、局部关系图、全局关系图、双链、标签页、搜索、最近文档中,数据都会被后端过滤掉再传给前端,前端只会显示发布可见的笔记本和文档,PS:设置为保护的文档虽然能够被检索到,但是具体的文档内容需要输入密码才会显示
- 设置为”隐藏/私密/禁止“的文档可以在发布服务里通过嵌入块/引用/?id=的链接查看,区别在于隐藏的文档可以直接看到内容,私密的文档需要输入密码,禁止的文档完全无法获取到内容
- 关闭的笔记本不会出现在发布服务中
效果展示
发布访问控制 UI

文档树上方的工具栏增加一个 “发布访问控制” 的按钮,点击后原本的文档图标 变化为 表示文档访问权限的图标,只需点击图标即可修改对应文档的发布访问权限:





整体对比

发布后:

其中可以注意到:文档树、标签、标签页、关系图、反向链接中有关不可见文档的内容都已消失。
可直接访问/密码访问/禁止访问 的区别
虽然 隐藏/私密/禁止访问 这三种权限的文档不会出现在文档树里,也搜索不到,但是在可见(公开/保护)的数据库/嵌入块/引用里包含了这些文档,文档会显示出窗口,但是其内容会被替换。

以上述数据库为例,
- “知识 C”是公开文档
- “知识 A"是隐藏文档
- ”知识 AAA”虽然标记为公开,但是其在隐藏的”知识 A“下,所以它也是不可见的,同理,其也在加密的”知识 AA“下,因此也需要密码才能访问,其最终表现出来的行为其实是 私密。
- ”论文 A"是禁止文档
我们来看一下当鼠标放在数据库上这些文档时弹出的窗口会显示什么:



总结
原本只打算做可见/不可见的,中间历经几次变更,最后把禁止和密码访问也加了进来,算是能满足大部分用户的需求了吧。目前功能已基本完成,不过还需要测试,官方预计明年一季度才能发布。在此期间我再打磨打磨,之后也会打包 release 在我的分支上,有兴趣的同学们也可以下载帮忙测试,谢谢大家。之后我还计划做一个发布增强插件,提升发布分享的体验,各位如果有什么相关需求和 idea 也非常欢迎,也许我会顺便做一下。
PS:这个 UI 已经是我的审美的极限了 😂,不一定会很符合大众的美感,我不太擅长设计界面,如果有什么 UI 的建议也可以提一提 orz。

