logo
mdocs
首页
特性
开始
文档
GitHub
首页
特性
开始
文档
GitHub
logo
mdocs

快速开始

安装
第一个知识库

核心概念

所见皆文件
域隔离
文档级邀请
无账户身份识别

使用指南

设置页面概览
Markdown 编辑
流程图生成
草稿与同步
我的文章与邀请
文档收藏
文档评论
受限域成员与模板
CLI Token
恢复码与身份找回

部署与配置

环境要求
配置文件
反向代理示例
FAQ
更新日志
Previous Page所见皆文件
Next Page文档级邀请
mdocs

Write freely. Never lose a word.

MIT License
产品
功能特性竞品对比更新日志
资源
文档安装指南
社区
GitHub问题反馈
© 2026 mdocs · Made with ♥ by xuhuafeifei

#域隔离(Domain)

#设计意图

mdocs 中的「域」是最顶层的逻辑隔离单元。它的设计目标是:

  • 不同团队或项目之间的文档在浏览入口(域列表、侧栏树)上彼此隔离
  • 在不引入复杂 RBAC 的前提下实现最基本的访问边界
  • 让每个用户拥有一个「个人域」作为私密工作区

域是存在于数据库逻辑上的虚拟概念,文档通过 domain_id 字段归属到某个域。

#三种域类型

域类型谁可以进入文档 permission 档位用途
public(公开域)任何人(含未登录访客)仅 public_read(3)、public_write(4)开放协作,默认域
restricted(受限域)域成员 与 创建者 为完整入口;仅被某篇文档 invite 的访客为受限入口(可见相关文档,不能凭此在域内任意新建文档)仅 domain_read(1)、domain_write(2)团队内部知识库
private(个人域)仅域主(domain_id === visitor_id)0~4 全部档位均可私人笔记本

域类型会约束域内文档可选的 permission 值——public 域不允许 private 档,restricted 域不允许 public 档。这是与之前版本的关键区别。

#五级文档权限

每篇文档有一个 permission 字段(0~4),定义谁能读、谁能写(在「能接触到该文档」的前提下):

数值名称谁可读谁可写
0private仅 owner仅 owner
1domain_read域成员仅 owner
2domain_write域成员域成员
3public_read任何人仅 owner
4public_write任何人任何人

#档位与域类型的约束关系

域类型允许的文档 permission说明
public仅 public_read(3)、public_write(4)公开域内不允许出现「仅域成员」或「仅 owner」的文档
restricted仅 domain_read(1)、domain_write(2)受限域内文档不暴露给域外任何人;非成员若需访问则靠 invite 叠加
private全部 0~4不设档位上限;private 域下文档也可以设为 public_write(4) 对外公开

#创建默认值

域类型新建文档默认 permission
privateprivate(0)
restricteddomain_read(1)
publicpublic_read(3)

#invite:独立叠加层

在五级权限之上,还有一个独立于档位的 invite 机制:owner 可以为任意一篇文档添加受邀者(read / edit),不受文档当前档位限制。

  • invite 不是一个权限档位(它不是 0~4 中的一员)
  • invite 与域成员互斥:已经是域成员的人,不能再被 invite
  • 鉴权顺序:owner → 档位语义 → invite 兜底

详见 文档级邀请。

#鉴权流程(概要)

读权限:
  1. owner → 放行
  2. public 域 → 3/4 档放行
  3. restricted 域 → 域成员走 1/2 档;非成员走 invite
  4. private 域 → 按档位实际语义 + invite

写权限:
  1. owner → 放行
  2. public 域 → 仅 4 档放行
  3. restricted 域 → 仅 2 档且为域成员;非成员走 invite
  4. private 域 → 按档位实际语义

#个人域(Private)

  • 每个访客注册时自动创建一个个人域,domain_id 等于该访客的 visitor_id
  • 个人域只有域主一个成员(不通过 domain_members 表维护多成员)
  • 文件权限可设为 0~4 任意档位——即使名为「个人」域,也可以公开某篇文档
  • 创建文档时默认权限为 private(0)

#列表 vs 直链

侧栏树、域下列表会按域准入过滤;若某人持有文档 ID 直链,读权限主要由文档档位 + invite 决定——例如 restricted 域内一篇 domain_read 文档,对非域成员不可读(除非被 invite)。需要更强保密时,请用 private(0) 档。

#设计取舍

  • 不引入团队/组织树:域只是逻辑标签。对于小团队,一个 public 域 + 每人一个 private 域就足够
  • 域隔离在数据库和文件系统两个层面:磁盘上每个域拥有独立的子目录(~/.mdocs/files/docs/{domain_id}/),数据库通过 domain_id 进行查询过滤;跨域「移动」需更新数据库记录并移动磁盘文件

操作说明(创建受限域、维护成员、套用模板):见 受限域成员与名单模板。

行为以 mdocs 应用代码与 SQLite schema 为准;随版本迭代本页会跟进。