zoukankan      html  css  js  c++  java
  • Odoo权限控制详解

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826105.html

    一:Odoo中的权限设置主要有以下5种

        1)菜单、报表的访问权限

        Odoo可以设置菜单项、某些报表的可见性,通过在xml文件中,对应的menu标签、report标签的groups属性来定义

        2)模型的访问权限设置

        Odoo可以设置模型对象的增删读改权限,这个在下面会详解。

        3)记录的访问权限设置

        模型的权限是针对改模型的所有记录的,而记录的访问权限则更加细致,针对每一条记录进行过滤筛选。在下文中详解。

        4)字段的访问权限设置

        Odoo可以设置具体字段的访问权限,包括可见性、写、改权限等。

        有两种方式:一种是在模型定义的代码中,通过某字段的read=[群组]、write=[群组]属性,指定字段对于哪些群组可读写。

                          另一种是在模型的视图xml文件中,对字段通过 groups属性指定访问权限。

        5)工作流操作权限

        工作流中的活动可以设置操作权限,规定只有哪些群组的用户才可以操作。

        1~4,都是通过群组来设置的,把用户添加至group,然后在代码中通过group以群组为单元进行权限设置。也可以在Odoo的开发者模式下,点击“群组”菜单,在可视化界面中进行设置:

         5是通过角色来设置的,通过为用户赋予角色,为角色赋予权限,也就为用户赋予了权限。

    二:Odoo中对数据的权限控制机制

        Odoo对数据的访问权限管理有两种机制:模型访问权限管理(access rule)、记录规则管理(record rule),记录规则管理是对模型访问权限管理的细化。

         

    三:访问权限组定义

        在模块的security目录下,新建groups.xml文件,在其中定义权限组。

    <?xml version="1.0" encoding="utf-8"?>
    <odoo>
        <data noupdate="0">
    
            <record id="权限组id" model="ir.module.category">
                <field name="name">XXX权限组</field>
                <field name="description">XXX模块权限设置</field>
            </record>
    
        </data>
    </odoo>

        该文件是data文件,需要在manifest.xml中配置。在创建数据库后就会执行解析,往ir.module.category模型插入相应的记录,从而创建出对应的权限组。

    四:模型访问控制

         模型权限访问管理:模型级的权限控制,该模型的所有记录,对于群组内用户(如无定义,则对所有用户)的读写改删权限控制。

         access rule是通过security文件夹下的ir.model.access.csv文件来控制的:

         这个文件第一行指明了需要控制的内容:

    id,name,model_id,group_id,perm_read,perm_write,perm_create,perm_unlink

         分别对应:

     id:记录的外部标识符 (也称为 XML ID)。在我们的模块中它应该是唯一。
     name:描述标题。官方模块通常使用模型名称和组的圆点分隔的字符串。如: todo.task.user
     model_id :模型的外部标识符。todo.task对应该标识符是model_todo_task
     group_id:权限组,在第一步中通过groups.xml。最重要的一点是供定义它的模块名前缀。比如员工组,它的标识符为base.group_user。 
     perm_XX:字段标记授予 读, 写, 创建,删除 权限。

        之后下面各行一一对应第一行定义的内容去书写权限控制,如:

    id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
    access_product_product_account_user,product.product.account.user,product.model_product_product,group_account_user,1,0,0,0
    access_product_product_account_manager,product.product.account.manager,product.model_product_product,group_account_manager,1,1,1,1
    access_product_template_account_manager,product.template.account.manager,product.model_product_template,group_account_manager,1,1,1,1

        最后,我们把模块的权限控制文件添加到manifest文件的data中加载:

    'data':['security/ir.model.access.csv',]

    五:记录访问控制

        记录控制:记录级别的权限控制,可以为某模型的记录定义权限条件,对于某群组中(如无指定,则所有用户)符合过滤条件的用户,赋予模型记录的读写改删权限。

        基于记录的权限可以控制指定模型的实例对象(数据纪录)的访问权限。

        记录规则的定义模型是ir.rule。

        记录规则控制,我们需要提供一个独特的名称,还需要操作符和规则过滤器组成的模型以达到访问限制,在Odoo中,规则过滤器通常是多个元组组成的列表。

        规则适用于某些特定的访问组。如果它没有访问组,这种特殊情况,被认为是全局 ( global字段将自动设置为 True)。全局规则是不同的,因为他们实施了限制,不会被非全局规则重写

        1:首先,我们在security目录下新建 模块名_security.xml 文件。

        2:然后,在其中添加以下内容:

    
    
    <?xml version="1.0" encoding="utf-8"?>
    <odoo>    
            <record id="模块名_对象_rule" model="ir.rule"> //为某对象添加记录规则
                <field name="name">规则名</field>
                <field name="model_id" ref="model_模块名"/>
                <field name="domain_force">[('字段名','操作符',值)]</field> //记录过滤表达式:符合该表达式的记录才能被访问
                <field name="groups" eval="[(值,ref('访问组id'))]"/> //访问组id在第一步创建时指定,用于指定本规则作用于哪些组
                <field name="perm_read" eval="0/1"/>
                <field name="perm_write" eval="0/1"/>
                <field name="perm_create" eval="0/1"/>
                <field name="perm_unlink" eval="0/1" />
    </record> </odoo>

        3:最后,在manifest中添加该文件到data属性下生效。

    六:Odoo中预设的权限组有哪些

        在Odoo的“用户”菜单中,可以在“访问权”选项卡处,为用户设定系统预设的角色、群组,主要预设的群组以及其权限有:

        Employee:base模块中定义的权限组,拥有业务伙伴、产品、财务、仓库等一些基本对象的读权限,用户一般应该属于该组,否则几乎不能查看和使用系统的任何功能。
        Administrator /Access Rights:base模块定义的权限组,该组拥有创建用户、创建权限组、设置安全规则等权限。具体来说,该组拥有菜单Administration/Users 和 Administration/Security的访问权限。

        Administrator / Configuration:base 模块定义的权限组,该组拥有系统管理功能,具体来说,该组拥 有菜单Administration/Customization、Administration/Translations、Administration/Modules Management 的访问权限

        Useability / No One:base模块定义的权限组,该组相当于一个空组。默认情况下,该组没有任何菜单和对象的访问权限,也没有任何 user 属于该组。系统默认是,如果没有定义任何组访问该菜单,则任何组都允许访问该菜单。也许某些菜单,希望默认任何组都不允许访问该菜单。这种情况,就可以声明 No One 组允许访问该菜单,那么,除非显示声明,否则其他组都不允许访问该菜单了。

        Useability / Extended View:系统的某些扩展功能,如果要使用扩展功能,就必须属于该组。一 般用户都不必要该组。
        Partner Manager:该组拥有业务伙伴配置和业务伙伴新建功能。默认情况下,只要是 Employee,就能查看业务伙伴信息,但只有 Partner Manager 才能配置、修改、新建、删除业务伙伴信息

        Product / Manager:product模块定义的权限组,该组拥有产品配置功能,也就是菜单 Products/Configuration 的访问权限。默认情况下,只要是 Employee,就能查看产品信息,但只有 Product / Manager 才能配置和修改产品信息

        Finance / Accountant:相当于普通会计师,可以进行日常的会计处理工作
        Finance / Invoice:拥有业务伙伴发票的处理权限,相当于负责收付钱和开票的出纳。也就是对菜单 Financial Management/Invoices 的访问权限。
        Finance / Manager:相当于财务管理员,可以配置财务模块,以及查看财务报表
        Sale / Manager:允许配置销售模块,也就是允许访问菜单 Sales Management/Configuration。
        Sale / Salesman:允许进行大部分的销售日常工作,相当于销售部业务员。 

  • 相关阅读:
    使用 Spring data redis 结合 Spring cache 缓存数据配置
    Spring Web Flow 笔记
    Linux 定时实行一次任务命令
    css js 优化工具
    arch Failed to load module "intel"
    go 冒泡排序
    go (break goto continue)
    VirtualBox,Kernel driver not installed (rc=-1908)
    go运算符
    go iota
  • 原文地址:https://www.cnblogs.com/ygj0930/p/10826105.html
Copyright © 2011-2022 走看看