You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:Frappe自定义应用中角色校验重定向中间件的调用位置

实现基于角色的Frappe应用公司检查逻辑(自定义中间件方案)

一、编写自定义中间件

在你的自定义应用目录(比如your_custom_app/your_custom_app)下新建middleware.py文件,写入以下逻辑:

import frappe

class CompanyCheckMiddleware:
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        # 跳过无需检查的路径,避免无限重定向
        excluded_paths = [
            "/login", "/assets/", "/files/", "/api/method/frappe.auth.login",
            "/your_custom_app/company-selection"  # 替换为你的公司选择页面路径
        ]
        current_path = environ.get("PATH_INFO", "")
        if any(current_path.startswith(path) for path in excluded_paths):
            return self.app(environ, start_response)

        # 仅对已登录且拥有指定角色的用户做检查
        if frappe.session.user != "Guest":
            user_roles = frappe.get_roles(frappe.session.user)
            if "Role Website" in user_roles:
                # 检查用户是否已设置默认公司(可根据实际存储字段调整)
                user_doc = frappe.get_doc("User", frappe.session.user)
                if not user_doc.default_company:
                    # 重定向到公司选择页面
                    frappe.local.response["type"] = "redirect"
                    frappe.local.response["location"] = "/your_custom_app/company-selection"
                    return self.app(environ, start_response)

        return self.app(environ, start_response)

二、在自定义应用中注册中间件

  1. 打开自定义应用的hooks.py文件,添加中间件配置:
# hooks.py
web_middlewares = [
    "your_custom_app.your_custom_app.middleware.CompanyCheckMiddleware"
]

注意路径要和你创建的middleware.py文件结构对应,确保Python能正确导入类。

  1. 保存配置后重启Frappe服务:
bench restart

三、核心注意事项

  • 路径排除要全面:必须把登录页、静态资源、公司选择页本身加入排除列表,否则会触发无限重定向。
  • 适配实际业务字段:如果用户的公司信息不是存在default_company字段,要替换成你自定义的存储字段(比如selected_company)。
  • 角色名称要准确:Frappe角色名称区分大小写,确保和系统中配置的角色名完全一致。
  • 遵循官方规范:通过自定义应用的hooks.py注册中间件是官方推荐的方式,无需修改frappe核心代码,能保证应用的可维护性和升级兼容性。

内容的提问来源于stack exchange,提问作者extra dhungel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:25:15