安全性

访问控制机制必须与安全策略一同配置。

基于“用户组”的访问控制

用户组是 res.groups 实体的数据记录,通过菜单定义授予菜单访问权限。然而如果没有菜单,对象还是有可能通过非直接方式进行访问,所以实际的基于对象级别的访问控制(读、写、创建、取消链接-unlink)必须针对用户组进行定义。通常情况下使用 CSV 文件定义,也可以通过视图的字段或者业务对象的“组(group)”属性限制访问。

访问权限

访问权限通过 ir.model.access 实体的数据记录定义。每个访问权限关联到一个实体、一个用户组(或者没有组的情况下针对全局访问),以及一系列授权:读、写、创建、取消链接(unlink)。这些权限通常用 CSV 文件定义,文件命名规则: ir.model.access.csv

id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_idea_idea,idea.idea,model_idea_idea,base.group_user,1,1,1,0
access_idea_vote,idea.vote,model_idea_vote,base.group_user,1,1,1,0

安全性练习:10-1

通过 odoo 界面添加访问控制。

创建一个用户 "John Smith"。然后创建一个用户组 “ "OpenAcademy / Session Read" 授予 Session 实体读权限。

  1. 通过 Settings ‣ Users ‣ Users 功能创建用户 “John Smith”;
  2. 通过 Settings ‣ Users ‣ Groups 功能创建用户组 session_read ,授予 Session 实体的读权限;
  3. 编辑 “John Smith” 为用户组 session_read 的成员;
  4. 以 “John Smith” 身份登录检验访问权限的准确性。

安全性练习:10-2

通过数据文件添加访问控制,使用数据文件:

  • 创建一个用户组 “OpenAcademy / Manager”,授予访问 OpenAcademy 所有实体的所有权限;
  • 授予所有用户 Session 和 Course 的读权限;
  • 创建一个文件 openacademy/security/security.xml 存储 OpenAcademy Manager 组的定义
  • 编辑文件 openacademy/security/ir.model.access.csv 授予指定的权限;
  • 最后,修改 openacademy/__manifest__.py 添加授权文件;

openacademy/__manifest__.py
openacademy/security/ir.model.access.csv
openacademy/security/security.xml

数据记录规则

数据记录规则控制实体的部分数据记录的访问权限。一个规则是实体 ir.rule 的一条数据记录,并且关联到一个实体,一些组(many2many 字段),以应用这些授权的控制。领域规则(domain)设定哪些数据记录应用访问权限控制。

示例:禁止删除 leads 实体非 cancel 状态的数据记录的规则。注意 groups 字段的值必须遵循 ORM 的方法write()一致的转换规则。

<record id="delete_cancelled_only" model="ir.rule">
    <field name="name">Only cancelled leads may be deleted</field>
    <field name="model_id" ref="crm.model_crm_lead"/>
    <field name="groups" eval="[(4, ref('sales_team.group_sale_manager'))]"/>
    <field name="perm_read" eval="0"/>
    <field name="perm_write" eval="0"/>
    <field name="perm_create" eval="0"/>
    <field name="perm_unlink" eval="1" />
    <field name="domain_force">[('state','=','cancel')]</field>
</record>

安全性练习:10-3

数据记录规则:

为实体 Course 和 "OpenAcademy / Manager"用户组添加一条数据记录规则,限制只有负责人才能修改课程( writeunlink)。如果一个课程没有负责人,该用户组的所有用户必须能够修改该课程。

在文件 openacademy/security/security.xml 中创建规则。

openacademy/security/security.xml

results matching ""

    No results matching ""