如何在Frappe ERPNext中配置团队权限与文档访问控制?
解决Frappe ERPNext团队文档互访权限配置问题
以下是三种可行的解决方案,按灵活性和自动化程度排序:
方法一:利用内置用户组与权限规则实现核心需求
这是最直接的内置功能方案,无需额外开发:
- 创建团队专属用户组
- 进入
用户与权限 > 用户组,为每个团队创建独立用户组(例如「销售团队A」「销售团队B」) - 将对应团队的所有成员添加到各自的用户组中
- 进入
- 配置文档权限(以Sales Order为例)
- 进入
用户与权限 > 角色管理器,找到对应业务角色(如「Sales User」) - 编辑该角色对「Sales Order」的权限:
- 取消勾选「Only if Creator」选项
- 在权限规则中添加自定义条件(替换为目标用户组名称):
doc.owner in frappe.get_list('User', filters={'user_group': '销售团队A'}, fields=['name']) - 根据业务需求设置「读」「写」等权限级别
- 为每个团队重复上述权限配置步骤,确保不同用户组仅能访问自身团队成员创建的文档
- 进入
方法二:自定义字段+服务器脚本实现更灵活的权限控制
适合需要更精细化权限场景(如允许跨子团队访问等):
- 添加团队关联字段
- 进入
自定义 > 自定义字段,为「Sales Order」添加链接类型字段「团队」,关联到「用户组」文档 - 设置该字段为必填,确保创建订单时必须选择所属团队
- 进入
- 编写权限控制脚本
- 进入
自定义 > 服务器脚本,新建脚本,类型选择「文档权限」,应用到「Sales Order」 - 粘贴以下脚本(可根据需求调整逻辑):
def has_permission(doc, ptype, user): # 获取当前用户所属的所有用户组 user_groups = frappe.get_list('User Group Member', filters={'user': user}, fields=['parent']) user_group_names = [item.parent for item in user_groups] # 验证文档所属团队是否在用户的组列表中 return doc.团队 in user_group_names - 保存后,用户仅能访问自身所属团队的Sales Order
- 进入
方法三:批量共享功能(适合临时/一次性授权场景)
如果仅需临时批量授权,可使用内置共享工具:
- 进入
用户与权限 > 批量共享 - 选择文档类型「Sales Order」,筛选出目标团队成员创建的所有订单
- 选择对应团队的用户组,批量设置「读」权限
- 注意:此方法仅对已存在的文档生效,新创建的文档需重新执行批量操作
注意事项
- 所有配置建议先在测试环境验证,避免影响生产数据
- 用户组成员变更后,权限会自动同步生效
- 若需对多个文档类型(如Quotation、Delivery Note)配置权限,需重复对应步骤
内容的提问来源于stack exchange,提问作者user22956970
相关产品推荐
相关产品推荐

