odoo权限管理详解

前言:
odoo作为ERP框架,必然有不同角色的用户使用这同一系统。对于系统上面的数据,应该对不同角色设置不同的查阅修改权限。odoo框架自带了了比较完善的权限控制机制。这篇博客的实践基于odoo13,其他版本可能略有差别。
A、按odoo使用对象分,权限控制可以分为用户和组这2个层级。
B、按数据展示丰富性分,权限控制可以分为菜单、对象、记录、字段、工作流这5个主要层级。

C、按权限设置方法分,权限控制可以分为前端设置和后端设置2种方式。

A、按使用对象

在odoo的权限管理中,组是非常重要的概念。odoo提供了两种数据驱动机制来管理或限制对数据的访问,这两种机制都通过组链接到特定用户。用户可以加入任意数量的组,并且权限机制与组关联,从而批量对用户权限加以管理。

B、按数据展示丰富性

(1)菜单级别:
设置哪些组可以访问哪些菜单
(2)对象级别
设置哪些组可以访问哪些对象(表),对象的访问权限包括增、删、改、查
(3)记录级别
设置哪些组可以访问哪些记录,也就是设置表的查询条件
(4)字段级别
设置表中的字段的访问权限
(5)工作流级别
在工作流的状态迁移中,设置哪些组允许触发状态迁移

C、按权限设置方法

(1)前端设置:

权限控制前端设置
如上图,odoo的权限控制可以完全只通过前端设置实现。可以在页面上创建用户创建组,可以在组下对菜单、视图、模型访问权限、记录规则进行设置。对于不太懂二次开发的实施人员,还蛮友好的。具体可以动手试试,不难就不举例演示了,不过从前端设置,最小的数据级别只能到记录,不能到字段。

(2)后端设置

前端的所有操作,都可以通过后端写代码实现。
在security文件夹下创建huaguoxian_security.xml文件,添加到__manifest__.py文件下。

2.1 创建用户
<!--创建用户-->
    <record id="user_v" model="res.users">
        <field name="login">MR_V</field>
        <field name="password">MR_V</field>
        <field name="partner_id" ref="base.partner_admin"/>
        <field name="groups_id" eval="[(6,0,[])]"/>
        <field name="signature"><![CDATA[<span>-- <br/>MR_V</span>]]></field>
    </record>
2.2 创建组分类
<!--创建一个组分类-->
    <record id="module_access_odoo_hgs_huaguoxian" model="ir.module.category">
        <field name="name">鲜果花模块设置</field>
        <field name="sequence">1000</field>
    </record>
2.3 创建组
<!--创建组-->
    <record id="group_huaguoxian_user" model="res.groups">
        <field name="name">鲜果花权限组</field>
        <field name="category_id" ref="odoo_hgs_huaguoxian.module_access_odoo_hgs_huaguoxian"/>
        <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
        <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]" />
        <field name="comment">the user will have access to his own data</field>
    </record>

    <record id="group_huaguoxian_user2" model="res.groups">
        <field name="name">鲜果花权限组2</field>
        <field name="users" eval="[(4, ref('base.user_root'))]"/>
        <field name="category_id" ref="odoo_hgs_huaguoxian.module_access_odoo_hgs_huaguoxian"/>
        <field name="comment">the user will have access to his own data</field>
    </record>
2.4 创建记录规则
<!--创建记录规则-->
    <record model="ir.rule" id="hgs_huaguoxian_rule">
        <field name="name">鲜果花退货单记录规则</field>
        <field name="model_id" search="[('model','=','huaguoxian.delivery_return_order')]" model="ir.model"/>
        <field name="groups" eval="[(4, ref('odoo_hgs_huaguoxian.group_huaguoxian_user'))]"/>
        <field name="global" eval="True"/>
        <field name="domain_force">[('return_status','=','2')]</field>
    </record>
2.5 创建字段访问权限
  1. 在你定义的form或tree的字段中,加上eval="[(4, ref(‘base.user_root’)),把’base.user_root’ 换成你自己定义的组或者用户
  2. 在py文件中创建字段的时候,就加上eval="[(4, ref(‘base.user_root’)),把’base.user_root’ 换成你自己定义的组或者用户
2.6 工作流控制

在py文件里,做限制。

两种思路:

  1. 在/security/ir.model.access.csv文件里将模型的权限将所有模型的perm_read,perm_create,perm_write,perm_unlink都设置为1,此时,所有组所有角色都有最高权限,再在view中用domain将菜单,对象,记录或者字段隐藏起来,只展示给部分的组
    2.把perm_read,perm_create,perm_write,perm_unlink都设置为0,此时菜单、对象、记录或字段对所有组都是不可访问的。再在前端的组里不断把对象记录字段的权限加上。

两种思路都可以实现对权限的管理。思路一可以完全靠后端的代码定义达到目的。思路二可以仅通过前端的权限添加达到权限管理的目的。

实际情况可能会方法一和方法二结合。对不敏感的模型开放较多权限,后续开发中有需求再在view中设置domain,缩小权限。对较敏感的模型先不开放权限,再通过前端不断对特别的组添加权限。

猜你喜欢

转载自blog.csdn.net/zhuangweijia/article/details/109089127