Odoo中文网|Odoo实施培训

 找回密码
 立即注册
搜索
热搜: Odoo OpenERP 实施
查看: 7895|回复: 1
打印 上一主题 下一主题

openerp权限设置总结

  [复制链接]

2

主题

5

帖子

16

积分

新手上路

Rank: 1

积分
16
跳转到指定楼层
楼主
发表于 2015-9-29 09:52:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近一直在弄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>

回复

使用道具 举报

1

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
沙发
发表于 2015-10-31 23:40:13 | 只看该作者
平心而论,Odoo的权限设计,既灵活又强大。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|技术支持|开发手册|Odoo中文网-远鼎旗下odoo培训网站 ( 苏ICP备15039516号 )

GMT+8, 2024-4-26 11:36 , Processed in 0.014245 second(s), 8 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表