用途:该技能面向 ERPNext/Frappe 开发中权限相关错误的处理,涵盖 PermissionError、has_permission 失败、角色问题以及文档访问问题,兼容 v14/v15/v16。
主要能力:区分权限钩子(has_permission、permission_query_conditions)与代码中权限检查的不同处理方式;提供错误响应模式,包括标准 PermissionError(HTTP 403)、带上下文的权限错误、软性权限拒绝(不报错);并给出客户端 JavaScript 中 frappe.call 错误回调与按钮权限判断的写法。
使用方式:在 has_permission 钩子中绝不抛错,拒绝返回 False,放行返回 None,并用 try/except 包裹、记录日志;在 permission_query_conditions 中返回 SQL 条件或空字符串,失败时返回最严格的兜底条件,且必须用 frappe.db.escape() 防止 SQL 注入。在 whitelisted 方法中可用 frappe.has_permission(..., throw=True) 或捕获 frappe.PermissionError,角色限制端点可用 frappe.only_for()。控制器方法用 doc.has_permission() 或 doc.check_permission(),让 PermissionError 正常传播。客户端在 error 回调中判断 exc_type 是否为 PermissionError。
适用场景:自定义权限钩子、列表视图过滤、API 端点与控制器中的权限校验、前端按钮与调用的权限处理。
限制:资料未提供具体安装命令、收费与价格信息;钩子只能拒绝权限,不能授予权限;错误信息中不应暴露敏感信息。