功能说明
本文档介绍如何对知识库中的文档、文件或文件夹进行权限变更操作,包括:- 添加权限 — 为成员授予文件/文件夹的访问权限
- 删除权限 — 移除成员对文件/文件夹的访问权限
- 修改权限 — 变更成员对文件/文件夹的权限角色
- 设置权限继承模式 — 控制文件/文件夹是否继承父节点的权限
- 获取权限继承模式 — 查询当前文件/文件夹的权限继承模式
核心概念:所有权限操作都基于文件的 dentryUuid(文件唯一标识)进行,操作者需要具备对应文件的权限管理能力。
权限说明
以下是不同成员类型和权限角色的介绍,及不同角色所对应的能力。权限角色(roleId)
进行权限变更时,需要指定权限角色:| roleId | 角色名称 | 能力说明 |
|---|---|---|
| OWNER | 拥有者 | 最高权限,可读写、管理权限、分配权限 |
| MANAGER | 管理者 | 可读写、管理权限(不含分配权限) |
| EDITOR | 编辑者 | 可查看、编辑、下载、添加 |
| DOWNLOADER | 查看下载者 | 可查看、下载 |
| READER | 仅可查看者 | 仅可查看,不可下载 |
权限成员类型(members.type)
| type 值 | 说明 | members.id 含义 |
|---|---|---|
| USER | 用户 | 员工 userId |
| ORG | 企业 | 企业 ID |
| DEPT | 部门 | 部门 ID |
| TAG | 自定义标签 | 标签 ID |
| CONVERSATION | 会话 | 会话 ID |
功能实现:添加权限
调用接口POST /v2.0/storage/spaces/dentries/{dentryUuid}/permissions,为指定成员授予对文件/文件夹的访问权限。
接口请参考添加权限文档说明,如何调用请参考如何调用服务端API文档介绍。
需要传入:
dentryUuid(Path):目标文件/文件夹的唯一标识,通过搜索文件接口获取;unionId(Query):操作者的 unionId,可调用查询用户详情接口获取;roleId(Body):要授予的权限角色,如 EDITOR;members(Body):要授权的成员列表,每个成员需指定type(成员类型)和id(成员 ID)。
功能实现:修改权限
调用接口PUT /v2.0/storage/spaces/dentries/{dentryUuid}/permissions,将指定成员的权限角色变更为新的角色。
降低权限时的重要限制:如果成员的当前权限是继承自父节点,且父节点继承来的权限角色高于目前想要设置的目标角色,则修改不会生效。
- 示例:父目录给某用户授予了EDITOR权限,在子文件夹上将其修改为READER会失败,因为继承的 EDITOR 权限仍然生效。
- 解决方案:需要先对该文件/文件夹调用设置权限继承模式接口,将继承模式设为BREAK(打断),切断父节点权限的传递,再进行权限修改。
接口请参考修改权限文档说明,如何调用请参考如何调用服务端API文档介绍。
需要传入:
dentryUuid(Path):目标文件/文件夹的唯一标识,通过搜索文件接口获取;unionId(Query):操作者的 unionId,可调用查询用户详情接口获取;roleId(Body):修改后的目标权限角色(如从EDITOR改为READER);members(Body):要修改权限的成员列表。
功能实现:删除权限
调用接口POST /v2.0/storage/spaces/dentries/{dentryUuid}/permissions/remove,移除指定成员对文件/文件夹的访问权限。
接口请参考删除权限文档说明,如何调用请参考如何调用服务端API文档介绍。
需要传入:
dentryUuid(Path):目标文件/文件夹的唯一标识,通过搜索文件接口获取;unionId(Query):操作者的 unionId,可调用查询用户详情接口获取;roleId(Body):要删除的权限角色(必须与成员当前实际持有的角色一致);members(Body):要删除权限的成员列表。
功能实现:设置权限继承模式
调用接口PUT /v2.0/storage/spaces/dentries/{dentryUuid}/permissions/inheritances,控制文件/文件夹是否继承父节点的权限。
两种继承模式:
- PASS_ON(传递):当前节点继承所有父节点的权限,相同成员权限取最大值(默认模式);
- BREAK(打断):在当前节点打断权限传递,不再继承父节点权限,适合需要单独设置独立权限的场景。
说明
BREAK模式不支持对OWNER和MANAGER角色打断。- 接口请参考设置权限继承模式文档说明,如何调用请参考如何调用服务端API文档介绍。
需要传入:
dentryUuid(Path):目标文件/文件夹的唯一标识,通过搜索文件接口获取;unionId(Query):操作者的 unionId,可调用查询用户详情接口获取;inheritance(Body):继承模式PASS_ON或BREAK。
功能实现:获取权限继承模式
调用接口GET /v2.0/storage/spaces/dentries/{dentryUuid}/permissions/inheritances,查询当前文件/文件夹的权限继承模式。
说明
- 接口会返回
inheritance字段,值为PASS_ON(传递)或BREAK(打断)。 - 接口请参考获取权限继承模式文档说明,如何调用请参考如何调用服务端API文档介绍。
需要传入:
HTTP示例:典型场景及操作步骤
场景一:给某用户添加文件编辑权限
- 通过搜索文件接口,获取目标文件的
dentryUuid; - 通过查询用户详情接口,获取目标用户的
userId和操作者的unionId - 调用添加权限接口,
roleId = "EDITOR",members[0].type = "USER",members[0].id = 目标用户 userId。
场景二:将某用户的权限从编辑者降级为只读
场景三:移除某用户对文件的所有权限
- 通过搜索文件接口,获取目标文件的
dentryUuid; - 通过查询用户详情接口,获取目标用户的
userId; - 调用删除权限接口,
roleId填写该用户当前持有的权限角色,members指定目标用户。
场景四:为某个子文件夹设置独立权限(不继承父目录)
- 通过搜索文件接口,获取子文件夹的
dentryUuid; - 调用设置权限继承模式接口,
inheritance = "BREAK"打断权限继承; - 再调用添加权限接口,单独为该文件夹配置所需的权限成员和角色。
注意事项
- 操作者(
unionId)需要具备对应文件的权限管理能力,否则会返回权限不足错误。 - 删除权限时,
roleId必须与成员当前实际持有的权限角色一致,否则操作无效。 - OWNER和MANAGER角色的权限不支持通过 BREAK 模式打断继承。
members列表单次最多传 30 个成员,超出需分批调用。- 目前所有权限接口仅企业内部应用支持,第三方应用暂不支持。