Odoo中限制Employee组仅访问Workers模型HR经理视图的技术问题
解决Odoo中细粒度视图/菜单项权限控制问题
我明白你的需求——已经给Employee组开放了Workers对象的读写权限,但想让他们只能访问HR经理对应的视图和菜单项,完全看不到Auditor相关的入口。下面是具体的实现方案,都是Odoo原生的权限控制逻辑,不用额外开发复杂模块:
核心思路
Odoo的权限是分层控制的:对象级权限(ir.model.access)是基础,而菜单项、动作、视图都可以单独设置groups_id字段,实现更细粒度的访问限制。我们需要给Auditor相关的菜单项、动作、视图单独绑定权限组,把Employee组排除在外。
具体步骤
1. 确认权限组
首先确保你已经有对应的专属组:比如group_hr_manager(Odoo原生HR经理组)和自定义的group_auditor(审计组)。如果没有,可以在模块的security目录下创建组的XML:
<!-- security/groups.xml --> <record id="group_auditor" model="res.groups"> <field name="name">Auditor</field> <field name="category_id" ref="base.module_category_human_resources"/> </record>
2. 控制菜单项可见性
修改你的菜单项XML,给Auditor菜单项指定仅允许Auditor/HR经理组访问,HR经理菜单项保留Employee组的权限:
<!-- views/menu.xml --> <!-- HR经理视图菜单项:允许Employee和HR经理访问 --> <menuitem name="HR Manager Workers" id="menu_hr_manager_workers" parent="base.menu_human_resources" action="action_hr_manager_workers" groups="base.group_user, base.group_hr_manager"/> <!-- Auditor视图菜单项:仅允许Auditor组访问 --> <menuitem name="Auditor Workers" id="menu_auditor_workers" parent="base.menu_human_resources" action="action_auditor_workers" groups="your_module.group_auditor"/>
注:
base.group_user是Odoo默认的内部用户组,如果你的Employee组是自定义的,替换成你自己的组ID即可。
3. 限制视图访问权限
即使用户通过URL直接访问视图,也要确保他们没有权限打开。给Auditor视图绑定专属组:
<!-- views/workers_views.xml --> <!-- HR经理视图 --> <record id="view_hr_manager_workers_tree" model="ir.ui.view"> <field name="name">workers.hr.manager.tree</field> <field name="model">workers</field> <field name="arch" type="xml"> <tree> <!-- 你的HR经理视图内容 --> </tree> </field> <field name="groups_id" eval="[(4, ref('base.group_user')), (4, ref('base.group_hr_manager'))]"/> </record> <!-- Auditor视图:仅允许Auditor组访问 --> <record id="view_auditor_workers_tree" model="ir.ui.view"> <field name="name">workers.auditor.tree</field> <field name="model">workers</field> <field name="arch" type="xml"> <tree> <!-- 你的Auditor视图内容 --> </tree> </field> <field name="groups_id" eval="[(4, ref('your_module.group_auditor'))]"/> </record>
4. 限制动作权限
最后,给对应的窗口动作也设置权限,避免用户通过动作URL绕开菜单项限制:
<!-- views/actions.xml --> <!-- HR经理动作 --> <record id="action_hr_manager_workers" model="ir.actions.act_window"> <field name="name">HR Manager Workers</field> <field name="res_model">workers</field> <field name="view_mode">tree,form</field> <field name="view_id" ref="view_hr_manager_workers_tree"/> <field name="groups_id" eval="[(4, ref('base.group_user'))]"/> </record> <!-- Auditor动作:仅允许Auditor组访问 --> <record id="action_auditor_workers" model="ir.actions.act_window"> <field name="name">Auditor Workers</field> <field name="res_model">workers</field> <field name="view_mode">tree,form</field> <field name="view_id" ref="view_auditor_workers_tree"/> <field name="groups_id" eval="[(4, ref('your_module.group_auditor'))]"/> </record>
测试验证
- 切换到Employee组的用户账号,检查菜单:Auditor相关的菜单项应该完全看不到;
- 尝试直接输入Auditor动作的URL(比如
/web#action=your_module.action_auditor_workers),应该会弹出"无权限访问"的提示。
这样就完美实现了你要的效果——Employee组能正常操作Workers对象,但只能看到HR经理视图,完全碰不到Auditor相关的内容。
内容的提问来源于stack exchange,提问作者Rahim Felix
相关产品推荐
相关产品推荐

