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
相关产品推荐
相关产品推荐

