通过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. (四)u-boot2013.01.01 for TQ210:《mkconfig分析》

    config.mk主要功能是配置单板信息和编译环境,将会被u-boot的makefile所调用,本文仍然侧重于句法分析. ####################################### ...

  2. 浅谈C#中ref与out的区别

    在C#这门高级语言中,你是否注意过ref与out的用法?你是否为在调用方法时需要多个返回值呢?不用急,接下来,我们去一起去研究一下这个问题... 其实呢,C#语言中,参数的传递一共有两种方法,值传递和 ...

  3. 使用Xcode5开发时的icon取消高光效果

    .在General中App Icons 使用Source--> AppIcon .在Images.xcassets 中依次添加对应尺寸的icon. .选中AppIcon ,在右侧第三个按钮下,勾 ...

  4. missing required architecture x86_64 in file 不支持64位

    ( slices) 解决方法:

  5. ASP.NET缓存全解析2:页面输出缓存 转自网络原文作者李天平

    页面输出缓存是最为简单的缓存机制,该机制将整个ASP.NET页面内容保存在服务器内存中.当用户请求该页面时,系统从内存中输出相关数据,直到缓存数据过期.在这个过程中,缓存内容直接发送给用户,而不必再次 ...

  6. android app性能优化大汇总(UI渲染性能优化)

    UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样.你可能会觉得“我的app加载很快”很重要,但我们还需要了解终端用户的期望,是否可以去量化这些期望呢?我们可以从人机交互心理学的角度来考虑 ...

  7. 如何使用10个小时搭建出个人域名而又Geek的独立博客?

    1.安装准备软件 Node.js.Git.GitHub DeskTop(前两个必须安装,后者可选) 2.本地搭建hexo框架.配置主题.修改参数.实现本地测试预览 3.链接GitHub.实现在线预览 ...

  8. Xcode - 方法注释插件

    VVDocumenter-Xcode,自动生成注释,感觉比较方便的插件,分享下,应该很多人都知道= = 在 https://github.com/onevcat/VVDocumenter-Xcode  ...

  9. c 语言时间的输出和比较

    time_t The most basic representation of a date and time is the type time_t. The value of a time_t va ...

  10. hibernate结合使用gson转换json中一点看法

    转发请注明出处:http://www.cnblogs.com/shizhongtao/p/3680216.html 在前后台的交互中,经常需要把bean对象与xml或者json,这里就把自己以前遇到的 ...