• Odoo权限机制


    权限管理的四个层次

        一、菜单级别:不属于指定菜单所包含组的用户看不到该菜单,只隐藏菜单,若知道菜单ID,任然可以通过指定URL访问

        二、对象级别:对某个对象是否有“创建,读取,修改,删除”的权限,可以简单理解为表对象

        三、记录级别:对对象表中的数据的访问权限,比如“客户”对象,业务员只能对自己所创建的客户有访问权限,而经理可以访问其管辖的所有业务员的“客户”对象

        四、字段级别:一个对象或表上的某些字段的访问权限,比如产品的成本字段只有经理有读写权限

    1 name = fields.Char('Name', size=128, required=True, select=True, read=['base.group_admin'], write=['base.group_admin'])

                定义name字段只有超级用户组可读写

    建立权限组

    就是我们常说的用户组,通常存放在 "reurity/模块名_security.xml" 文件下

        例如:

    1 <!-- 新建用户组manager -->
    2 
    3     <record id="manager" model="res.groups">
    4         <field name="category_id" ref="module_category_hidden"/>
    5         <field name="name">Manager</field>
    6         <field name="comment">经理将可以访问 任务管理-配置</field>
    7         <field name="implied_ids" eval="[(4, ref('base.group_hr_user'))]"/>
    8         <field name="users" eval="[(4, ref('base.user_root'))]"/>
    9     </record> 

        @category_id:用户组所属的模块名

        @name:用户组名

        @comment:用户组的注释

        @implied_ids:基于哪个用户组,这个层级关系 

    <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>

          是最基础的用户名,最初是基于这个,后面一层一层递增,例如 base.group_hr_user  定义时就是基于最基础

        @users:预设用户属于这个用户组

    权限组

        权限管理核心是权限组,每个权限组,可以设置权限组的Menus, Access Right, Record Rule

        #Menus:

            定义该权限组可以访问哪些菜单,若该权限组可以访问某父菜单,父菜单对应的子菜单会显示出来,若不想显示其子菜单,可以把其子菜单加入一个空的权限组

        #Access Right:

            定义该权限组可以访问哪些对象,以及拥有 增、删、查、改的哪个权限(create, read, write, unlink)

        #Record Rule:

            定义该权限组可以访问对象中的哪些记录,以及拥有 增、删、查、改的哪个权限,Access Right 是对对象中的所有记录赋权限,Record Rule 则通过定义domain过滤指定某些记录赋权限 

    ['&',('department','=',user.context_department_id.id),('state','=','pr_draft')]

              申购单的部门等于当前用户的部门,且申购单的状态是草稿状态

    基于组的访问控制

        #视图中

            运用group_id

    1 <record id="view_form_manage_list" model="ir.ui.view">
    2     <field name="name">yati.form.manage</field>
    3     <field name="model">yati.tdm</field>
    4     <field name="inherit_id" ref="yati.view_apply_inspection_backend"/>
    5     <field name="group_id" eval="[(6,0,[ref('yati.employee),ref('yati.manage')])]"
    6 />
    7 
    8 </record>

            eval:把eval的值通过作为python运算返回该属性

            ref:视图的方法,根据 module_name.xml_id 返回数据库id

            [(6,0,[xx,yy])]

                (0,_,{'field': value}) 这将创建一个新的记录并连接它

                (1,id,{'field': value}) 这是更行一个已经连接了的记录的值

                (2,id,_) 这是删除或取消连接某个已经连接了的记录

                (3,id,_) 这是取消连接但不删除一个已经连接了的记录

                (4,id,_) 连接一个已经存在的记录

                (5,_,_) 取消连接但不删除所有已经连接了的记录

                (6,_,[ids]) 用给出的列表替换掉已经连接了的记录

                这里的下划线一般是0或False

            运用groups

                <button name="invoice_pay_customer" type="object" string="Register Payment" attrs="{'invisible': ['|', ('state','!=','open'),('sent','=',True)]}"                groups="base.group_user"/>

                <field name="invoice_line_ids" groups="account.group_account_invoice"/>

                <menuitem name="China Account" id="menu_china_account" parent="account.menu_finance" sequence="4" groups="account.group_account_user"/>

        #在模型中

            package_id = fields.Many2one(comodel_name='stock.quant.package', string='package', related='quant.package_id', readonly=True,            groups="stock.group_tracking_lot")

            如果有多个用户组,用户组之间用逗号隔开

        #小结

        只有在视图中有完整标签时,会用group_id,其他都用groups

  • 相关阅读:
    POJ 1862 Stripies (简单贪心)
    HDU 2181 哈密顿绕行世界问题(DFS)
    POJ 3262 Protecting the Flowers (贪心)
    Aizu 2249 Road Construction (最短路 SPFA)
    POJ 3484 Showstopper(二分)
    HDU 6235 2017-CCPC-哈尔滨站 Permutation(简单模拟)
    IDEA常用插件
    解决IDEA插件加载失败
    解决zsh无法使用maven
    Linux安装Maven
  • 原文地址:https://www.cnblogs.com/laky/p/11447834.html
Copyright © 2020-2023  润新知