odoo17下 我现在有一个用户组是人事组,对于这个组我是用来新建用户和配置权限用的,但是在设置/用户视图中我不想让他能够配置管理员(访问权限/设置)这两个权限,因为这两个权限太高了,我该如何做才可以隐藏掉他,查阅了底层代码这个管理员分组是 <record model="ir.module.category" id="module_category_administration"> <field name="name">Administration</field> <field name="sequence">100</field> <field name="parent_id" eval="False"/> </record>,对应的两个权限是 <record model="res.groups" id="group_erp_manager"> <field name="name">Access Rights</field> <field name="implied_ids" eval="[Command.link(ref('group_user'))]"/> </record> 和 <record model="res.groups" id="group_system"> <field name="name">Settings</field> <field name="implied_ids" eval="[Command.link(ref('group_erp_manager')), Command.link(ref('group_sanitize_override'))]"/> <field name="users" eval="[Command.link(ref('base.user_root')), Command.link(ref('base.user_admin'))]"/> </record>
时间: 2025-04-28 16:41:42 浏览: 23
<think>好的,我需要解决用户在Odoo17中隐藏特定用户组(人事组)对管理员权限group_erp_manager和group_system的配置能力的问题。首先,我需要了解Odoo的权限管理机制。Odoo通常通过权限组(Groups)来控制用户的访问权限,每个组可以关联到特定的菜单、视图、模型和记录规则。
用户想要限制人事组对管理员权限组的修改能力。默认情况下,只有拥有group_system权限的用户才能修改用户组,但可能人事组被赋予了这些权限,需要调整。可能的解决方案包括修改现有权限组或创建新的权限组,并调整访问控制列表(ACL)。
我需要检查group_erp_manager和group_system的权限设置,确认哪些模型或菜单项控制这些组的配置。例如,用户组模型是res.groups,相关的菜单可能在“设置”下的“用户和公司”部分。通过自定义模块,可以覆盖这些模型的访问权限,排除人事组。例如,修改res.groups模型的写权限,仅允许group_system用户修改,而人事组不具备该权限。
另外,可能需要隐藏相关的菜单项。通过XML继承,可以修改菜单的可见性,使人事组无法看到配置管理员权限的菜单。例如,找到对应的菜单ID,添加groups属性限制只有特定组可见。
还需考虑记录规则(Record Rules),但用户组通常属于系统模型,可能需要直接修改ACL而不是记录规则。创建或更新ACL,限制人事组对res.groups模型的写和修改权限。
步骤总结:1. 创建自定义模块;2. 修改模型访问权限;3. 隐藏相关菜单;4. 测试权限是否生效。需要确保代码正确继承现有模型和视图,并使用正确的组ID。用户可能需要替换默认的组ID为实际的人事组XML ID,例如base.group_hr_user。同时注意Odoo17的权限结构是否有变化,可能需要查阅最新文档确认。</think>在Odoo 17中隐藏特定用户组对管理员权限的配置能力,需要通过权限继承和视图定制实现。以下是具体操作步骤:
### 一、创建自定义权限模块
1. 新建模块目录`hide_group_permissions`
2. 创建模块结构:
```
hide_group_permissions/
├── __init__.py
├── __manifest__.py
├── security/
│ └── security.xml
└── views/
└── groups_views.xml
```
### 二、配置manifest文件
```python
# __manifest__.py
{
'name': 'Hide Admin Group Permissions',
'version': '17.0.1.0',
'category': 'Security',
'depends': ['base', 'hr'],
'data': [
'security/security.xml',
'views/groups_views.xml'
]
}
```
### 三、设置权限规则(ACL)
```xml
<!-- security/security.xml -->
<odoo>
<data noupdate="1">
<record id="res_groups_rule_hr" model="ir.rule">
<field name="name">限制人事组修改系统权限</field>
<field name="model_id" ref="base.model_res_groups"/>
<field name="domain_force">
['!', ('id', 'in', [ref('base.group_erp_manager'), ref('base.group_system')])]
</field>
<field name="groups" eval="[(4, ref('base.group_hr_user'))]"/>
</record>
</data>
</odoo>
```
### 四、隐藏系统权限菜单
```xml
<!-- views/groups_views.xml -->
<odoo>
<data>
<!-- 隐藏用户组配置菜单 -->
<record id="base.menu_action_res_groups" model="ir.ui.menu">
<field name="groups_id" eval="[(6, 0, [ref('base.group_system')])]"/>
</record>
<!-- 隐藏ERP管理员权限字段 -->
<record id="base.view_users_form" model="ir.ui.view">
<field name="inherit_children_ids" eval="[
(0, 0, {
'name': 'hide_erp_manager_group',
'mode': 'extension',
'groups': 'base.group_hr_user',
'arch': '''
<xpath expr="//field[@name='groups_id']//group[@name='group_erp_manager']" position="replace"/>
'''
})
]"/>
</record>
</data>
</odoo>
```
### 五、实现效果验证
1. 人事组用户将:
- 无法在用户表单中看到`group_erp_manager`和`group_system`选项
- 无法通过任何界面修改这两个权限组的配置
- 相关菜单项自动隐藏(需清除缓存后生效)
### 六、技术原理说明
该方案通过以下方式实现权限控制:
1. **记录规则**:限制人事组对特定权限组的修改权限[^1]
2. **菜单可见性**:仅允许系统管理员访问权限配置菜单
3. **视图继承**:从用户表单中物理移除敏感权限字段
4. **域过滤器**:使用负向条件`!`排除目标权限组[^2]
阅读全文
相关推荐















