指南
访问控制
在 Fumadocs 中实现内容访问限制
Fumadocs 通过其框架设计提供了灵活的内容访问限制实现方式。
Loader API 方法
主要推荐使用 loader() API 在数据源层面过滤内容。你可以按需创建加载器,并从内容源过滤文件以限制可访问的内容。
基本实现
框架允许根据 frontmatter 属性过滤 MDX 文件:
const filteredSource = update(docs.toFumadocsSource())
.files((files) =>
files.filter((file) => {
if (file.type === 'meta') return true;
return file.data.permission === 'public';
}),
)
.build();工厂函数模式
对于复杂场景,数据源可以变成接受权限级别的工厂函数:
export function createSource(permission: 'public' | 'admin') {
// 根据权限参数过滤文件
}关键优势
这种方式在输入层面进行过滤,而非在渲染阶段或构建时,确保受保护的内容被完全过滤,同时不影响灵活性。
自定义实现替代方案
如果不使用 Loader API,开发者可以在框架层面(如 Next.js 路由)实现访问控制,在渲染页面前检查用户权限,并在访问被拒绝时返回 notFound()。
这种方法提供了更大的灵活性,但需要独立管理侧边栏、搜索功能等特性。