toMedia
指南

访问控制

在 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()

这种方法提供了更大的灵活性,但需要独立管理侧边栏、搜索功能等特性。

On this page