ReboFiles文档
开始3
什么是 ReboFiles
快速开始
可运行的演示
集成到你的应用6
React 组件
Headless:你自己的界面
不使用框架
样式与主题
键盘与无障碍
语言
文件9
上传
预览与查看器
搜索
实时更改与大文件夹
评论
星标与字段
版本、回收站与空间
打包下载 .zip
Word 文档
服务器14
路由
框架与登录
谁可以做什么
存储:S3、GCS、Azure 与磁盘
检查上传
元数据:SQLite 与 Postgres
数据库结构
共享与链接
动态与通知
钩子、日志与限制
保留、法律保留与导出
桌面端与其他来源
同步文件夹
上线生产环境
协作1
AI 助手(MCP)
参考5
包
组件与 hooks
客户端 API
HTTP 路由
状态与路线图
↑↓ 移动↵ 打开Esc 关闭38 个页面

服务器 谁可以做什么

谁可以做什么

ReboFiles 本身没有用户体系。identify 根据你的会话判断谁在请求;authorize 在每条路由上被调用,并传入所涉及的条目。
是谁

identify

它接收 Request,为已登录的人返回 { id },否则返回 null(响应 401)。这个 id 就是网盘称呼他们的方式:所有者、共享、动态记录。admin: true 在使用 byRoles 时可以配置网盘。

做什么

操作

操作询问时机
list文件夹中的内容;null 表示根目录。之后会对其中每个条目询问 read。
read单个条目、搜索、最近、回收站、动态记录:一个人能看到的一切。
create创建文件夹,附带它所在的文件夹。
upload上传文件,附带它所在的文件夹;新版本、缩小的图片、文字,附带该文件。完成时会再次询问。
rename重命名条目,或为文件夹设置颜色。
move先询问条目,再询问目标文件夹。
trash, restore移入回收站,以及从回收站恢复。
delete永久删除:文件内容从存储桶中删除。
download获取读取文件的地址,有效期几分钟。
comment目前尚未用于任何操作:评论者在查看者之外可以做的事。
share共享、撤回共享,以及链接。
configure整个网盘的设置。使用 byRoles 时,identify 返回 { id, admin: true } 的用户。
角色

byRoles

根据网盘本身判断:所有者可以对条目及其中的内容做任何事;被共享的人可以做其角色允许的事。查看者可以浏览、阅读和下载;编辑者还可以创建、上传、重命名、移动和移到回收站;只有所有者可以永久删除和共享。任何已登录的人都可以查看根目录并在其中放置内容;每个人只看到自己的。

自定义

你自己的规则

在你的规则中调用 byRoles。第四个参数是整个网盘,便于编写需要查看条目所在文件夹的规则。

lib/auth.ts
import { type Action, type User, byRoles } from '@rebofiles/server';
import type { Drive, Entry } from '@rebofiles/core';

export function mayI(user: User, action: Action, entry: Entry | null, drive: Drive): boolean {
  // Your rules first: an auditor may look at everything, never change it.
  if (isAuditor(user)) return ['list', 'read', 'download'].includes(action);
  return byRoles(user, action, entry, drive);
}
错误

被拒绝时

Sign in first. · You may not do that here.

401 表示 identify 返回了 null;403 表示 authorize 返回了 false。

团队

群组

createDriveHandler({
  // …
  identify: async (request) => {
    const user = await session(request);
    // The groups your application says they are in: what is shared with "group:sales" is theirs to read.
    return user ? { id: user.id, groups: await groupsOf(user.id) } : null;
  },
  authorize: byRoles,
});

await client.share(folder.id, 'group:sales', 'editor');

共享可以按 id 指定某人,用 * 指定所有已登录用户,或用 group:<id> 指定群组。群组成员由你的应用决定,由 identify 随每个人一起给出:网盘不保存成员列表,因此在你的应用中加入或离开团队的人,在下一次请求时就会获得或失去相应的权限。在共享对话框中,像输入 id 一样输入 group:sales;“与我共享”会显示共享给其所在群组的内容。