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

Odoo11用户规则创建及菜单权限配置问题咨询

在Odoo 11中创建用户规则并控制菜单项可见性

首先咱们先理清楚核心需求:让特定菜单项仅对管理员组可见,普通用户完全看不到。这需要结合权限组配置、菜单权限关联以及必要的模型访问权限来实现,我一步步给你拆解:

1. 完善权限组的创建

你已经创建了权限分类(ir.module.category),接下来需要创建管理员组和普通用户组,并关联到这个分类:

<!-- 创建管理员组 -->
<record model="res.groups" id="group_weather_admin">
    <field name="name">Weather Admin</field>
    <field name="category_id" ref="rights_current_weather"/>
    <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> <!-- 继承基础普通用户权限 -->
</record>

<!-- 创建普通用户组 -->
<record model="res.groups" id="group_weather_user">
    <field name="name">Weather User</field>
    <field name="category_id" ref="rights_current_weather"/>
    <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>

2. 控制菜单项的可见性

要让菜单项仅对管理员组可见,只需要在菜单的groups_id字段中关联管理员组即可。假设你的菜单项ID是menu_weather_dashboard,修改代码如下:

<record model="ir.ui.menu" id="menu_weather_dashboard">
    <field name="name">Weather Dashboard</field>
    <field name="parent_id" ref="base.menu_reporting"/> <!-- 父菜单可根据你的实际需求修改 -->
    <field name="action" ref="action_weather_list"/> <!-- 关联对应模型的动作 -->
    <field name="groups_id" eval="[(6, 0, [ref('group_weather_admin')])]"/> <!-- 仅管理员组可见 -->
</record>

这样设置后,只有属于group_weather_admin组的用户才能看到这个菜单项,普通用户组的成员完全看不到。

3. 模型访问权限控制(可选但建议)

如果你的菜单项关联了自定义模型(比如weather.info),还需要设置模型的访问权限,确保管理员组有完整读写权限,普通用户组没有(或仅开放只读):

<!-- 管理员组的模型访问权限(全权限) -->
<record model="ir.model.access" id="access_weather_admin">
    <field name="name">Weather Info Admin Access</field>
    <field name="model_id" ref="model_weather_info"/> <!-- 替换为你的模型ID -->
    <field name="group_id" ref="group_weather_admin"/>
    <field name="perm_read" eval="1"/>
    <field name="perm_write" eval="1"/>
    <field name="perm_create" eval="1"/>
    <field name="perm_unlink" eval="1"/>
</record>

<!-- 普通用户组的模型访问权限(无权限) -->
<record model="ir.model.access" id="access_weather_user">
    <field name="name">Weather Info User Access</field>
    <field name="model_id" ref="model_weather_info"/>
    <field name="group_id" ref="group_weather_user"/>
    <field name="perm_read" eval="0"/>
    <field name="perm_write" eval="0"/>
    <field name="perm_create" eval="0"/>
    <field name="perm_unlink" eval="0"/>
</record>

4. 记录级规则(ir.rule)的使用(细粒度控制场景)

如果你的需求是:普通用户能看到模型,但只能查看自己创建的记录,管理员能看到所有记录,这时候才需要创建ir.rule。示例代码如下:

<!-- 管理员组的记录规则:可见所有记录 -->
<record model="ir.rule" id="rule_weather_admin_all">
    <field name="name">Weather Admin All Records</field>
    <field name="model_id" ref="model_weather_info"/>
    <field name="group_id" ref="group_weather_admin"/>
    <field name="domain_force">[(1,'=',1)]</field> <!-- 匹配所有记录 -->
    <field name="perm_read" eval="1"/>
    <field name="perm_write" eval="1"/>
    <field name="perm_create" eval="1"/>
    <field name="perm_unlink" eval="1"/>
</record>

<!-- 普通用户组的记录规则:仅可见自己创建的记录 -->
<record model="ir.rule" id="rule_weather_user_own">
    <field name="name">Weather User Own Records</field>
    <field name="model_id" ref="model_weather_info"/>
    <field name="group_id" ref="group_weather_user"/>
    <field name="domain_force">[('create_uid','=',user.id)]</field>
    <field name="perm_read" eval="1"/>
    <field name="perm_write" eval="1"/>
    <field name="perm_create" eval="1"/>
    <field name="perm_unlink" eval="0"/>
</record>

最后验证步骤

  1. 把上述代码添加到模块的XML文件中(通常放在security/security.xml)
  2. 升级你的模块
  3. 将用户分配到对应的组:管理员用户加入Weather Admin组,普通用户加入Weather User组
  4. 切换不同用户账号,验证菜单项的可见性和模型访问权限

小提醒:如果你的菜单项是继承自系统原有菜单,记得用inherit_id进行修改,而不是重新创建哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:21:09