zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    WampServer Mysql配置
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 质因数2
    Java实现 蓝桥杯VIP 算法提高 前10名
  • 原文地址:https://www.cnblogs.com/laky/p/11447834.html
Copyright © 2011-2022 走看看