zoukankan      html  css  js  c++  java
  • openerp权限设置总结

    Openerp权限设置

    最近一直在弄openerp权限问题,现在终于懂了一些。主要对模块下的security 目录下的文件:xxx_security.xml、ir.model.access.csv进行讲解

    @ xxx_security.xml

    1、  建立组

    <record id="group_department_project_admin" model="res.groups">

    <field name="name">A</field>

    <fieldname="category_id" ref="B"/>

    <field name="users" eval="[(4, ref('base.user_root'))]"/> //把admin用户加入该组中

    </record>

    @name 组名称

    @ category_id 属于哪个应用程序,或者哪个模块

    @ users 组里面的用户

    这样B应用程序就建立了一个名叫A的组。并且初始化了A组的一个用户admin

    注:组一般是由职位等级划分的

    2、 组控制菜单显示

    A

    <record model="ir.ui.menu" id=" memu_id1">

    <field name="name" >menu1</field>

    <field name="groups_id" eval="[(6,0,[ref('A'),ref('B')]),]"/>           

    <field name="sequence">1</field>

    </record>

    @ name 菜单名称

    @ groups_id 哪些组可以访问该菜单

    @ sequence 该菜单的序号

    这样A组与B组的成员都可以访问menu1菜单,menu1菜单的显示顺序为1

    注:eval 后面解释,多个组访问用“,”隔开

    B

    <menuitem id="menu_id2 " name="menu2" parent="menu_id1" sequence="1" groups="A,B "/>

    @ name 菜单名称

    @ parent 父类菜单 如果没有可以不写parent

    @ groups哪些组可以访问该菜单

    这样menu1的子菜单menu2可以被A组合B组的成员访问

    注:两种菜单的group设置有区别

    3、 权限规则
    这个可以过滤掉其它数据,只取你需要的数据

    <record model="ir.rule" id="rule1">

            <field name="name">rule1</field>

            <field name="model_id" ref="model_model1"/>

            <field name="global" eval="True"/>

            <field name="domain_force">[1,’=’,1]</field>

                  <field name="groups" eval="[(4,ref('A'))]"/>

    </record>

    @ name 规则名称

    @ model_id 依赖的模块

    @ global 是否是全局

    @ domain_force 过滤条件

    @ groups 属于哪个组

    这样A组的成员就可以取到model_model1的所有数据

    注:model_id 这个放在后面讲ir.model.access.csv的时候讲

    domain_force 这个很重要,只有这个写好了才能获取到自己想要的数据

    4. ir.model.access.csv

    定义组对对象的权限矩阵

    @id 随便取

    @name 随便取

    @model_id:id 这个就是你所定义的对象了

    @group_id:哪个组

    @perm_read","perm_write","perm_create","perm_unlink" 增删改查权限了。1代表有权限

    5.Eval

    many2many

    (0,0,{values}) 根据values里面的信息新建一个记录。

    (1,ID,{values})更新id=ID的记录(写入values里面的数据)

    (2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

    (3,ID) 切断主从数据的链接关系但是不删除这个数据

    (4,ID) 为id=ID的数据添加主从链接关系。

    (5) 删除所有的从数据的链接关系就是向所有的从数据调用(3,ID)

    (6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行(5)再执行循环IDs执行(4,ID))

    例子[(6, 0, [8, 5, 6, 4])] 设置 many2many to ids [8, 5, 6, 4]

    one2many

    (0, 0,{ values })根据values里面的信息新建一个记录。

    (1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据)

    (2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

    例子:

    [(0,0,{'field_name':field_value_record1,...}),(0,0,{'field_name':field_value_record})]

    many2one的字段比较简单,直接填入已经存在的数据的id或者填入False删除原来的记录。

    6.隐藏的常用技巧

    * 直接隐藏

     <group name="owner" position="attributes">

            <attribute name="invisible">True</attribute>

              </group>

    * 满足某些条件的隐藏

             <xpath expr="//field[@name='parent_id']" position='attributes'>

                 <attribute name="attrs">{'invisible': [('passenger','=', True)]}</attribute>

             </xpath>

    <group col="4" string='旅客信息' attrs="{'invisible': [('supplier','=', True)]}"></group>

     * 通过组来隐藏

     <xpath expr="//field[@name='type']" position="attributes">

                    <attribute name="groups">base.group_no_one</attribute>

             </xpath>

    * 菜单的隐藏

      <record model="ir.ui.menu" id="crm.menu_crm_opportunities">

            <field eval="[(6,0, [ref('base.group_no_one'),])]" name="groups_id"/>

         </record>

  • 相关阅读:
    conda 激活环境失败解决办法
    openSmile-2.3.0在Linux下安装
    Ubuntu16.04下安装多版本cuda和cudnn
    几个最新免费开源的中文语音数据集
    train loss与test loss结果分析
    文件路径
    Properties类与配置文件
    内省
    Junit单元测试
    Hdfs常用命令
  • 原文地址:https://www.cnblogs.com/luojiao-lx/p/3759559.html
Copyright © 2011-2022 走看看