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

Odoo用户添加至自定义组及产品创建权限控制问题排查

问题排查与修复方案

嘿,我看了你遇到的问题——明明给用户加了限制创建产品的组,结果人家还是能新建产品对吧?咱来看看代码里的问题:

1. 最直接的拼写错误!

你在product.py的create方法里写了:

if self.env.user.has_group('yor_module.your_group'):

这里的yor_module明显是手滑打错了!得换成你这个自定义模块的技术名称(就是你模块文件夹的名字,比如如果你的模块叫restrict_product_create,就写restrict_product_create.your_group)。

这个拼写错误会让系统找不到你定义的组,所以判断逻辑永远不触发,用户自然能正常创建产品,这绝对是主要原因!

2. 额外加个权限层的保障

虽然你在security.xml里创建了组,但最好给这个组加个明确的权限限制,避免和其他组的权限冲突。在security.xml里补上这段:

<record model="ir.model.access" id="access_product_restricted">
    <field name="name">Restrict product creation</field>
    <field name="model_id" ref="product.model_product_product"/>
    <field name="group_id" ref="your_group"/>
    <field name="perm_read" eval="1"/>
    <field name="perm_write" eval="1"/>
    <field name="perm_create" eval="0"/>
    <field name="perm_unlink" eval="0"/>
</record>

这样从权限配置层面直接禁用创建权限,和代码里的弹窗提示形成双重保险,更稳妥。

3. 修正后的product.py代码

我给你调整了下,顺便补了正确的异常导入(旧版Odoo可能不用,但标准写法更规范):

# -*- coding: utf-8 -*-
from openerp import fields, models, api
from openerp.tools.translate import _
from openerp.exceptions import Warning  # 新版本Odoo里异常都在这个路径下

class product_product(models.Model):
    _inherit = "product.product"

    @api.model
    def create(self, vals):
        # 这里一定要替换成你自己的模块技术名称!
        if self.env.user.has_group('你的模块名.your_group'):
            raise Warning(
                _('Sorry, you are not allowed to create new products.'),
            )
        return super(product_product, self).create(vals)

4. 验证步骤别忘了

改完之后按这几步来:

  • 升级你的自定义模块
  • 确认用户已经被正确添加到那个限制组里
  • 让用户重新登录(或者刷新页面,确保权限更新)
  • 再去试创建产品,应该就能弹出警告了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:00:15