通过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…)。所以要完善的权限配置我们还必须配合各种权限规则来组合使用:

最新文章

  1. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.3.1:
  2. [整理]Ajax Post请求下的Form Data和Request Payload
  3. BCB一个问过100遍啊100遍的问题
  4. SVN Application
  5. var a=[]; 和 var a=new Array(); 的区别,为什么前者效率高
  6. elasticsearch常用的插件
  7. web.xml中配置Spring中applicationContext.xml的方式
  8. jackson的简单使用(可转xml)
  9. uva 10330 - Power Transmission(网络流)
  10. 学习javascript 的一点感想
  11. Centos 使用yum安装MongoDB 4.0
  12. dlo,学习清单
  13. 16.ajax_case02
  14. Java并发编程(十一)-- Java中的锁详解
  15. POJ 3468 A Simple Problem with Integers(线段树&amp;区间更新)题解
  16. VC++ 打开文件或文件夹对话框的实现方法
  17. c++ 将容量设置为容器的长度(shrink_to_fit)
  18. Git分布式工作流程
  19. 加密shell
  20. 标签球-Js插件

热门文章

  1. 【谷歌市场安装】Google Play 闪退问题解决
  2. 转载事务在C#方法里的应用
  3. 导出用户列表到Excel的几种方法
  4. java使用POI jar包读写xls文件
  5. C++类(一)
  6. php中magic_quotes_gpc对unserialize的影响
  7. RAC监听与tns
  8. 第七篇、OC_图片的裁剪基于SDWebImage
  9. NSURLConnection、NSURLSession 补充
  10. 20141211—C#面向对象,封装