如何在Odoo15自定义模块中通过Merchant菜单管理指定组内部用户?
实现方案:自定义Merchant菜单管理特定组用户(Odoo 15)
1. 隐藏原生Users菜单项
通过继承ir.ui.menu模型,将系统自带的Users菜单设为不活跃,使其不再在界面显示:
from odoo import models class IrUiMenu(models.Model): _inherit = 'ir.ui.menu' def _load_menus(self, debug): menus = super()._load_menus(debug) user_menu_id = self.env.ref('base.menu_users').id if str(user_menu_id) in menus: menus[str(user_menu_id)]['active'] = False return menus
2. 创建自定义Merchant菜单及视图
在模块XML文件中定义新菜单、动作和视图,关联res.users模型并通过domain过滤仅显示目标用户组的记录:
<!-- 假设目标用户组的XML ID为your_module.group_merchant --> <record id="action_merchant_users" model="ir.actions.act_window"> <field name="name">Merchants</field> <field name="res_model">res.users</field> <field name="view_mode">tree,form</field> <field name="domain">[('groups_id', 'in', [ref('your_module.group_merchant')])]</field> </record> <menuitem id="menu_merchant_users" name="Merchant" parent="base.menu_administration" action="action_merchant_users"/>
3. 创建新用户时自动分配指定用户组
继承res.users模型,重写create方法,确保新建用户自动加入目标组:
from odoo import models, api class ResUsers(models.Model): _inherit = 'res.users' @api.model def create(self, vals): merchant_group = self.env.ref('your_module.group_merchant') if 'groups_id' not in vals: vals['groups_id'] = [(6, 0, [merchant_group.id])] else: # 避免覆盖用户手动选择的其他组,仅追加目标组 vals['groups_id'].append((4, merchant_group.id)) return super().create(vals)
4. 菜单权限限制(可选)
如果需要仅让特定角色访问Merchant菜单,可在XML中给菜单绑定权限组:
<menuitem id="menu_merchant_users" name="Merchant" parent="base.menu_administration" action="action_merchant_users" groups="your_module.group_merchant_manager"/>
注意事项
- 替换
your_module为你的自定义模块名称 - 提前在模块中创建好目标用户组
group_merchant(可通过XML或后台界面创建) - 模块安装后需验证:原生Users菜单隐藏、Merchant菜单仅显示目标组用户、新建用户自动加入指定组
内容的提问来源于stack exchange,提问作者Abdus Sattar Bhuiyan
相关产品推荐
相关产品推荐

