注意:此功能自 v16 版本起可用。
自定义权限类型允许你创建超出内置权限(read、write、create、delete、submit)之外的权限标志。可用于特定操作的权限,例如“审批记录”、“下载文件”或“模拟用户”。
工作原理
共分为三个步骤:
- 开发者创建权限类型:在开发模式下为 DocType 创建权限类型
- 开发者添加权限检查:在操作发生的代码中添加权限检查
- 系统管理员分配权限给角色:在 Desk 界面中为角色分配权限
权限类型会作为 fixture 保存,并随你的应用一起发布。
示例:在发票上创建“审批”权限
步骤 1:创建权限类型(开发者)
- 启用开发者模式并以管理员身份登录
- 创建一条新的 权限类型 记录
- 将 权限类型 设置为
approve,将 DocType 设置为Invoice - 保存
权限类型现已创建,并将随你的应用一起导出。
步骤 2:在代码中添加权限检查(开发者)
在你的发票控制器或处理审批的函数中,检查该权限:
@frappe.whitelist()
def approve_invoice(invoice_name):
invoice = frappe.get_doc("Invoice", invoice_name)
if not frappe.has_permission(invoice, "approve"):
frappe.throw("Not permitted to approve", frappe.PermissionError)
invoice.approval_status = "Approved"
invoice.save()
你也可以在不抛出错误的情况下进行检查:
if frappe.has_permission(invoice, "approve"):
# show approve button on frontend
步骤 3:分配给角色(系统管理员)
应用安装后,系统管理员将权限分配给角色:
- 打开 角色权限管理器
- 选择发票 DocType
- 对于每个角色,勾选或取消勾选“审批”列,操作方式与其他权限相同
- 该权限现在将应用于所有拥有该角色的用户
就这样。拥有“审批”权限的用户现在可以执行该操作。没有该权限的用户将看到错误提示。
如何检查权限
在你的 Python 代码中使用 frappe.has_permission():
# Check document-level permission
if frappe.has_permission(invoice_doc, "approve"):
# User can approve this invoice
# Check DocType-level permission
if frappe.has_permission("Invoice", "approve"):
# User can approve any invoice