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

如何在Odoo Web控制器中抛出403与404错误?

Odoo Web控制器权限验证与异常抛出实现

一、验证用户权限并抛出403(禁止访问)异常

在Odoo控制器中,你可以通过两种方式实现细粒度权限验证并抛出403异常:

1. 检查模型操作权限

使用check_access_rights方法验证用户对指定模型的操作权限(如读、写、创建、删除),无权限时直接抛出Forbidden异常,或调用Odoo封装的request.access_denied()方法。

示例代码:

import odoo.http as http
from odoo.http import request
from werkzeug.exceptions import Forbidden

class CustomController(http.Controller):
    @http.route('/my/secure/action', type='http', auth='user')
    def secure_action(self):
        # 检查当前用户是否拥有res.partner模型的写权限
        partner_model = request.env['res.partner']
        if not partner_model.check_access_rights('write', raise_exception=False):
            # 方式1:抛出Werkzeug标准Forbidden异常
            raise Forbidden()
            # 方式2:调用Odoo内置方法返回403响应
            # request.access_denied()
        
        # 执行后续业务逻辑
        return "操作已执行"

2. 检查用户所属权限组

如果需要验证用户是否属于特定权限组,可通过引用权限组记录并检查用户组关联:

示例代码:

@http.route('/admin/only/action', type='http', auth='user')
def admin_only_action(self):
    # 引用系统管理员权限组
    admin_group = request.env.ref('base.group_system')
    if admin_group not in request.env.user.groups_id:
        raise Forbidden()
    
    # 管理员专属业务逻辑
    return "管理员操作完成"

二、抛出404(未找到)异常

当请求的资源(如指定ID的记录)不存在时,可通过两种方式抛出404异常:

1. 使用Werkzeug的NotFound异常

直接抛出NotFound异常,Odoo会自动处理并返回404响应:

示例代码:

from werkzeug.exceptions import NotFound

@http.route('/partner/detail/<int:partner_id>', type='http', auth='user')
def partner_detail(self, partner_id):
    partner = request.env['res.partner'].browse(partner_id)
    if not partner.exists():
        raise NotFound()
    
    # 返回合作伙伴详情逻辑
    return f"合作伙伴名称:{partner.name}"

2. 使用Odoo内置的request.not_found()方法

调用request.not_found()直接返回404响应:

示例代码:

@http.route('/product/detail/<int:product_id>', type='http', auth='user')
def product_detail(self, product_id):
    product = request.env['product.product'].browse(product_id)
    if not product.exists():
        return request.not_found()
    
    # 返回产品详情逻辑
    return f"产品名称:{product.name}"

内容的提问来源于stack exchange,提问作者Ernesto Ruiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:08:29