权限类型

注意:此功能自 v16 版本起可用。

自定义权限类型允许你创建超出内置权限(readwritecreatedeletesubmit)之外的权限标志。可用于特定操作的权限,例如“审批记录”、“下载文件”或“模拟用户”。

工作原理

共分为三个步骤:

  1. 开发者创建权限类型:在开发模式下为 DocType 创建权限类型
  2. 开发者添加权限检查:在操作发生的代码中添加权限检查
  3. 系统管理员分配权限给角色:在 Desk 界面中为角色分配权限

权限类型会作为 fixture 保存,并随你的应用一起发布。

示例:在发票上创建“审批”权限

步骤 1:创建权限类型(开发者)

  1. 启用开发者模式并以管理员身份登录
  2. 创建一条新的 权限类型 记录
  3. 权限类型 设置为 approve,将 DocType 设置为 Invoice
  4. 保存

权限类型现已创建,并将随你的应用一起导出。

步骤 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:分配给角色(系统管理员)

应用安装后,系统管理员将权限分配给角色:

  1. 打开 角色权限管理器
  2. 选择发票 DocType
  3. 对于每个角色,勾选或取消勾选“审批”列,操作方式与其他权限相同
  4. 该权限现在将应用于所有拥有该角色的用户

就这样。拥有“审批”权限的用户现在可以执行该操作。没有该权限的用户将看到错误提示。

如何检查权限

在你的 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