Skip to content
Go back

Dify 权限控制说明

Published:  at  03:51 PM

Table of contents

Open Table of contents

一、角色类型及权限对比

角色成员管理应用管理数据集管理API 密钥管理系统配置使用权限
所有者 (Owner)✔️ 全部权限✔️ 创建/编辑/删除✔️ 创建/编辑/删除✔️ 完整权限✔️ 完整配置✔️ 全部权限
管理员 (Admin)➖ 添加普通成员/编辑✔️ 创建/编辑/删除✔️ 创建/编辑/删除❌ 无权限⚠️ 部分权限✔️ 全部权限
编辑者 (Editor)❌ 无✔️ 创建/编辑✔️ 创建/编辑❌ 无权限❌ 无✔️ 协作使用
普通成员 (Normal)❌ 无❌ 无❌ 无❌ 无权限❌ 无✔️ 使用
数据集操作员/知识库操作员 (Dataset Operator)❌ 无❌ 无✔️ 查询 / 上传 / 标注❌ 无权限❌ 无❌ 无(除数据集外)

说明:

  • dataset_operator 不是直接通过权限配置设置的用户,而是通过开放知识库权限限定的部分用户,只具有知识库相关操作权限

二、权限校验流程(Controller 层)

Dify 采用基于 Flask 装饰器 + 当前用户角色的多层权限控制机制:

@setup_required
@login_required
@account_initialization_required

用于校验初始化、登录状态。业务权限通过如下逻辑控制:

所有者校验

if not TenantAccountRole.is_privileged_role(current_user.role):
    raise NoPermissionError("Only owner can perform this operation")

管理员及以上权限

if not TenantAccountRole.is_admin_role(current_user.role):
    raise NoPermissionError("Only admin can perform this operation")

数据集操作权限(编辑/上传/清洗)

if not current_user.is_dataset_editor:
    raise NoPermissionError("Operation requires dataset edit permission")

三、角色能力详解

所有者(Owner)

管理员(Admin)

编辑者(Editor)

普通成员(Normal)

数据集操作员(Dataset Operator)


四、知识库(数据集)权限控制机制

权限策略字段:datasets.permission

权限控制校验逻辑

if not DatasetService.check_dataset_permission(dataset, current_user):
    raise NoPermissionError("No permission to access this dataset")

编辑权限判断逻辑(上传、清洗)

if not current_user.is_dataset_editor:
    raise NoPermissionError()

支持角色:owner, admin, editor, dataset_operator


五、错误响应标准

场景状态码示例响应
权限不足403{ "error": "NoPermissionError", "message": "You do not have permission to do this" }
参数错误400{ "error": "ValidationError", "message": "Invalid parameter specified" }
操作冲突(唯一所有者)409{ "error": "ConflictError", "message": "Cannot remove the only owner" }
资源不存在404{ "error": "NotFoundError", "message": "Resource not found" }

Suggest Changes

Previous Post
Dify-API(V1)具体实现方式
Next Post
奥克兰腾讯光子工作室群 - 一面 - 面试总结