SuperAPI AI 工具集

erpnext-permissions

安全与审计

查看项目

更新于 10-16 00:04

技能介绍

用途:为 Frappe/ERPNext 应用提供权限系统的实现指南,帮助开发者按五层结构控制访问。

主要能力:Frappe 权限分为五层——角色权限(用户能做什么,通过 DocType 权限表配置)、用户权限(用户能看到哪些文档,通过 User Permission 记录)、权限级别 Perm Levels(用户能看到哪些字段,通过字段 permlevel 属性)、权限钩子(自定义逻辑,通过 hooks.py)、数据脱敏(v16+,通过字段 mask 属性)。权限类型包括 read、write、create、delete、submit、cancel、select(v14+)、mask(v16+)。自动角色有 Guest、All、Administrator、Desk User(v15+)。

使用方式:用 frappe.has_permission 检查权限,支持 DocType 级、文档级、指定用户及 throw 参数;文档实例可用 doc.has_permission 与 doc.check_permission。get_doc_permissions 获取文档全部权限。add_user_permission/remove_user_permission/get_user_permissions 管理用户权限。frappe.share.add 共享文档。数据脱敏需在字段配置 mask=1,并为角色添加 mask 权限;脱敏不作用于自定义 SQL、原始 SQL 查询报表和 frappe.db.sql(),需手动实现。权限钩子 has_permission 只能拒绝不能授予,默认必须返回 None;permission_query_conditions 过滤列表查询,仅影响 get_list() 不影响 get_all(),且必须用 frappe.db.escape() 转义。字段级权限中,级别 0 必须先授予才能授予更高级别。

适用场景:需要按角色、文档、字段或自定义逻辑控制 ERPNext 数据访问时。

限制:数据脱敏仅 v16+ 支持;select 权限 v14+;Desk User 角色 v15+;自定义权限类型 v16+ 实验性。用户查询应使用 get_list,get_all 会绕过权限。使用 ignore_permissions 需记录原因,权限变更后需 frappe.clear_cache()。版本差异与调试方法(debug=True、permission_debug_log)见资料。