通过view实现字段的只读、隐藏操作

原文地址:http://cn.openerp.cn/view_groups/

在OpenERP V7视图(ir.ui.view)多了一个非常有用的字段(groups_id)

'groups_id': fields.many2many('res.groups', 'ir_ui_view_group_rel',
'view_id', 'group_id', string='Groups',
help="If this field is empty, the view applies to all users.
Otherwise, the view applies to the users of those groups only."),

以前的视图

在OpenERP 7.0之前我们访问的视图一般是这样组成的:
1.会根据你的菜单动作所绑定的view_id来直接找到所要呈现的视图,如果没指定或者没找到就会选取你将要访问的model的优先级最高的视图。
2.找到基础的视图后,系统会找出所有继承这个视图的视图,把他们按照优先级叠加在一起。
3.最后视图渲染呈现到浏览器。

也就是说在旧版本里面不同用户看到同一个界面都是同一组视图叠加形成的。

现在的视图

在添加了这个groups_id字段后,视图的叠加方式将要改变。相信各位看到这里也差不多能明白了。对的!现在不同用户登陆,叠加的视图会根据你当前用户组来选择。不同用户看到的视图可以完全不一样。情况如下图:

详细代码可以看。

#addons/base/ir/ir_ui_view.py
def get_inheriting_views_arch(self, cr, uid, view_id, model, context=None):
    .....
# filter views based on user groups
return [(view.arch, view.id)
for view in self.browse(cr, 1, view_ids, context)
if not (view.groups_id and user_groups.isdisjoint(view.groups_id))]

有什么用?

1.某些字段对于某些权限组的人是可写入,但是其他权限组的人是只读。
例如我新建一个视图view1继承产品视图view修改成本价为只读,view2修改成本价可写,groups_id 是采购经理,那么没有采购经理权限的人打开视图看到的是成本价只读(view+view1),采购经理看到的是可写的(view+view1+view2)。

2.具有某些权限组的人看到的视图更丰富。(例如:OpenERP里面销售订单行editable的设置就是通过groups_id来实现)

怎么用?

<!--sale/sale_view.xml-->
        <record id="view_order_form_editable_list" model="ir.ui.view">
            <field name="name">sale.order.form.editable.list</field>
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="groups_id" eval="[(6, 0, [ref('product.group_uos'), ref('product.group_stock_packaging'), ref('sale.group_mrp_properties')])]"/>
            <field name="arch" type="xml">
                <xpath expr="//field[@name='order_line']/tree" position="attributes">
                    <attribute name="editable"/>
                </xpath>
            </field>
        </record>

这里就是上面说的2里面的实现方式,这里为视图view_order_form_editable_list定义了groups_id,我们来一起分析下。

  • eval:把eval的值通过作为python运算后返回到该属性,这里就是eval后的值会返回给groups_id。
  • ref:OpenERP视图的方法。根据module_name.xml-id返回数据库id。
  • [(6, 0, [xx,yy])]: 看这里 http://cn.openerp.cn/openerp_import_image_by_xmlrpc/

再想

这样定义对于不同的用户组呈现不同组合的视图这种需求是非常有用。但是它并不是完整的权限配置,因为这里的权限设置都是对于视图上的,用户还可以通过别的方式来直接或者间接得到数据(例如:导入、导出,XML-RPC…)。所以要完善的权限配置我们还必须配合各种权限规则来组合使用:

openerp 经典收藏 通过view实现字段的只读、隐藏操作(转载)的更多相关文章

  1. openerp经典收藏 字段定义详解(转载)

    字段定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...

  2. 通过view实现字段的只读、隐藏操作【转】

    原文地址:http://cn.openerp.cn/view_groups/ 在OpenERP V7视图(ir.ui.view)多了一个非常有用的字段(groups_id) 'groups_id': ...

  3. openerp 经典收藏 记录规则 – 销售只能看到自己的客户,经理可以看到全部(转载)

    记录规则 – 销售只能看到自己的客户,经理可以看到全部 原文地址:http://cn.openerp.cn/record_rule/ OpenERP中的权限管理有四个层次: 菜单级别: 即,不属于指定 ...

  4. openerp 经典收藏 Openerp开发进销存系统完毕总结(转载)

    原文地址:http://blog.csdn.net/heartrude/article/details/9142463 Openerp开发进销存系统完毕总结 分类: 代码历程 OpenERP 工程思想 ...

  5. openerp经典收藏 OpenERP库存管理的若干概念讲解(新增库存价值)(转载)

    OpenERP库存管理的若干概念讲解(新增库存价值) 原文:http://shine-it.net/index.php/topic,2425.0/topicseen.html 一.复式库存(Doubl ...

  6. openerp经典收藏 对象定义详解(转载)

    对象定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...

  7. openerp经典收藏 深入理解工作流(Workflow)(转载)

    深入理解工作流(Workflow) 原文:http://shine-it.net/index.php/topic,2494.0.html 一.工作流定义:<?xml version=" ...

  8. openerp经典收藏 对象的预定义方法(转载)

    对象的预定义方法 原文:http://shine-it.net/index.php/topic,2159.15.html 每个OpenERP的对象都有一些预定义方法,这些方法定义在基类osv.osv中 ...

  9. openerp经典收藏 深入理解对象(转载)

    深入理解对象(转载) 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded9 ...

随机推荐

  1. Java基础知识强化之IO流笔记77:NIO之 Selector

    Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接. 1.  ...

  2. OC 和 swift 小结

    1 什么是 OC 语言? OC 语言即面向对象语言,它扩展了 ANSI C 语言,将 SmallTalk 式的消息传递机制加入到 ANSI C 中.它是苹果 OS 和 iOS 以及相关的 API,Co ...

  3. hdu 4744 最小费用流

    #include <cstdio> #include <queue> #include <cstring> #include <cmath> #defi ...

  4. hdu 1243 反恐训练营 最长公共字序列

    此题的题意很明确,就是求最长公共子序列: #include<iostream> #include<algorithm> #include<cstdio> #incl ...

  5. Matplotlib之无GUI时的解决办法

    需添加: import matplotlib as mpl mpl.use('Agg') 而且必须添加在import matplotlib.pyplot之前,否则无效

  6. sass中出现的中文问题

    在这园子里看到了很多优秀的资源,自己也想写写东西,就突然想到了以前遇到写sass的时候出现中文乱码的解决方案.所有就自己又总结了一下.(以下测试步骤都是自己完成的!没有任何转载,如有错误,希望大家指正 ...

  7. 密码强度的js插件(完成)

    效果如下图: 低:

  8. hdu 2955 Robberies 0-1背包/概率初始化

    /*Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  9. java集合(交集,并集,差集)

    说明:这里没有求差集的代码,有了交集和并集,差集=并集-交集       package com; import java.util.ArrayList; import java.util.HashS ...

  10. adb连接不上手机

    昨天电脑重装了系统,今天打开之前的eclips工作环境,点击run as -> android application,一直报各种诡异的错误,总之就是连接不上手机. 其中包括 Adb conne ...