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>
最后验证步骤
- 把上述代码添加到模块的XML文件中(通常放在
security/security.xml) - 升级你的模块
- 将用户分配到对应的组:管理员用户加入
Weather Admin组,普通用户加入Weather User组 - 切换不同用户账号,验证菜单项的可见性和模型访问权限
小提醒:如果你的菜单项是继承自系统原有菜单,记得用inherit_id进行修改,而不是重新创建哦!
内容的提问来源于stack exchange,提问作者user_123
相关产品推荐
相关产品推荐

