环境
odoo-14.0.post20221212.tar
base_user_role-12.0.2.1.2.zip
下载地址:
https://apps.odoo.com/apps/modules/12.0/base_user_role/
权限管理
简介
为了更好的熟悉权限,我们先来了解下用户,odoo中的用户分为三类:
- 内部用户(
Internal User
): 企业内部的用户,拥有对系统内部的访问权限,也就是说有odoo后端的访问权限。 - 门户用户(
Portal
): 非企业内部用户,通常为业务合作伙伴用户,拥有有限的资源访问权限。 - 公共用户(
Public
): 面向公众的权限,可以理解为游客权限。
提示:管理员登录系统,激活开发者模式,即可在设置-用户详情页对用户类型进行编辑(Settings -> Users & Companies -> Users
)
以上三类用户的信息都存在res_user
与res_partner
表中,那么在odoo中如何区分用户类型以及如何做权限控制的呢?
为了解决上述问题,odoo采用了用户组机制。将用户划分为不同的组(一个用户可以归属多个用户组,一个用户组也可以拥有多个用户),然后给组分配权限,从而实现用户权限的管控及用户类型识别。
以上三种用户分别归属以下用户组:
- 内部用户:
base.group_user
- 门户用户:
base.group_portal
- 公共用户:
base.group_public
odoo也支持自定义用户组(Settings -> Users & Companies -> Groups
),并为用户分配不同的用户组,及设置相关权限(菜单权限,视图权限,访问权限,记录规则)
此外,为了更方便的管理用户组,odoo还支持对用户组(group
)进行分类:将多个用户组划分为一个用户组分类(category
)。
- 用户组和用户组分类:一个用户组分类可以拥有多个用户组,一个用户组仅归属一个用户组分类,属于1对多的关系。
- 用户组和用户组的关系:用户组可以被用户组继承(伪继承),当继承某个用户组时,本组用户也会自动加入继承的用户组。如果一个用户属于多个用户组,那么该用户权限为用户组权限的并集,因此设计用户组权限时一定要考虑好组与组之间权限是否会发生冲突。
定义用户组(权限组)
示例:xml数据文件的方式定义菜单权限用户组
<odoo>
<data noupdate="1">
<record id="estate_property_menu_groups" model="ir.module.category"><!-- id:供代码或者xml中引用,model:odoo的category模型-->
<field name="name">[房地产]模块菜单权限</field><!--用户组分类名称-->
<field name="sequence">1</field><!--组分类显示顺序、优先级-->
</record>
<!--########################
[房地产]模块菜单
########################-->
<record id="group_estate_property_root_menu" model="res.groups">
<field name="name">Real Estate</field><!--用户组名称,阐明组的角色/目的-->
<field name="category_id" ref="estate_property_menu_groups"/><!--指定用户组所属组分类-->
<field name="implied_ids" eva l="[(4, ref('base.group_user'))]"/><!--定义用户组继承自哪些组,也就是说该用户组也拥有这些继承组的权限-->
<field name="users" eva l="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/><!--为用户组添加用户 base.user_root root用户 -->
</record>
</data>
</odoo>
说明:
noupdate
:如果数据文件的内容预期只应用一次(只加载一次,安装或者更新模块时),则可以将noupdate
设置为1。如果文件中的部分数据需要应用一次,则可以将文件的这部分放在<data-noupdate="1">
中,如下:
<odoo>
<data noupdate="1">
<!-- Only loaded when installing the module (odoo-bin -i module) -->
<operation/>
</data>
<!-- (Re)Loaded at install and update (odoo-bin -i/-u) -->
<operation/>
</odoo>
base.user_admin
:admin
用户(ID为2的用户,用户数据定义在odoo\addons\base\data\res_users_data.xml
中
base.user_root
: __system__
用户(ID为1的用户,technical admin
)
category
定义相关数据存储在ir_module_category
表中
添加的group,可以在Settings -> Users & Groups -> Groups
界面看到,组定义相关数据存储在res_groups
表中
eva l语法说明
(0, 0, values)
从提供的valueS
字典创建新记录,形如(0, 0, {'author': user_root.id, 'body': 'one'})
。(2, ID, values)
使用values
字典中的值更新id值=ID的现有记录(2, ID)
删除id=ID这条记录(调用unlink方法,删除数据及整个主从数据链接关系)(3, ID)
删除主从数据的链接关系但是不删除这个记录(4, ID)
为id=ID的数据添加主从链