在Odoo中,权限通常由模型(models),视图(views),菜单(menus)和动作(actions)等构成。权限组则是一组权限的集合,可以分配给用户,用以定义他们在Odoo系统中的角色和访问级别。
以下是Odoo中配置权限和权限组的一些基本步骤和代码示例:
创建权限组(Security Groups)
在Odoo模块中,首先需要在安全文件中定义权限组。通常,这个文件被命名为security/ir.model.access.csv。
以下是一个示例CSV文件,定义了一个模型的读写权限:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_my_model_manager,my.model.manager,model_my_model,group_my_model_manager,1,1,1,1
access_my_model_user,my.model.user,model_my_model,group_my_model_user,1,0,0,0
上面的CSV文件定义了两个权限组:
group_my_model_manager: 该组内的用户对应模型有完全的读写权限。
group_my_model_user: 该组内的用户对应模型只有读权限。
定义权限组
在Odoo的XML文件中,你需要定义权限组,通常这些定义放在security.xml文件内。
<odoo>
<data noupdate="1">
<!-- 创建一个新的权限组 -->
<record id="group_my_model_manager" model="res.groups">
<field name="name">My Model Manager</field>
<field name="category_id" ref="module_category_my_module"/>
</record>
<!-- 创建另一个权限组 -->
<record id="group_my_model_user" model="res.groups">
<field name="name">My Model User</field>
<field name="category_id" ref="module_category_my_module"/>
</record>
</data>
</odoo>
在上面的XML代码中,module_category_my_module应该是定义在ir.module.category中的一个外部ID,代表这些组的分类。
分配权限组给用户
在Odoo的用户界面中,你可以直接将权限组分配给用户。如果你希望通过代码来做到这一点,通常是在模块的res.users模型上创建或者更新记录。
# 获取权限组
manager_group = self.env.ref('my_module.group_my_model_manager')
user_group = self.env.ref('my_module.group_my_model_user')
# 分配权限组给用户
user = self.env['res.users'].create({
'name': 'New User',
'login': 'new_user@test.com',
'groups_id': [(6, 0, [manager_group.id])], # 此处是设置权限组的关键
})
更新用户的权限组
user.write({
‘groups_id’: [(4, user_group.id)], # 添加用户到一个权限组
‘groups_id’: [(3, manager_group.id)], # 从一个权限组中移除用户
})
注意
- 在Odoo中,权限和权限组的配置是非常关键的,因为它直接关系到业务流程和数据安全。
- 上面提供的代码示例需要在Odoo的模块中正确地放置和引用。
- 如果你在现有模块的基础上进行修改,确保在模块的__manifest__.py文件中添加对安全文件的引用。
- 始终在更新Odoo实例之前备份你的数据和代码,以避免潜在的问题