Skip to content

Dify 权限控制说明

Published:  at  03:51 PM

一、角色类型及权限对比

角色成员管理应用管理数据集管理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
奥克兰腾讯光子工作室群 - 一面 - 面试总结