原文地址: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.找到基础的视图后,系统会找出所有继承这个视图的视图,把他们按照优先级(priority越小,优先级越高)叠加在一起。
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…)。所以要完善的权限配置我们还必须配合各种权限规则来组合使用:

通过view实现字段的只读、隐藏操作【转】的更多相关文章

  1. openerp 经典收藏 通过view实现字段的只读、隐藏操作(转载)

    通过view实现字段的只读.隐藏操作 原文地址:http://cn.openerp.cn/view_groups/ 在OpenERP V7视图(ir.ui.view)多了一个非常有用的字段(group ...

  2. js控制多层单选,多选按钮,做隐藏操作

    项目中遇到多层级单选,多选按钮的置灰/隐藏操作.特意写了一个公用组件: //置灰方式 //controllerArr数组添加如下数据: //{ctrlName:"gds_anquanyuan ...

  3. 帝国cms调用栏目自定义字段(栏目简介)如何操作

    开源的cms就像一个操作系统,可以满足大部分人的需求,如果你想增加一些特殊的功能,那就二次开发呗,就像APP一样.帝国cms默认的栏目是没有调用栏目自定义字段的,我们可以增加一些概述类的文字,让读者对 ...

  4. PostgreSQL 的字段类型和表操作笔记

    字段类型 数值类型 Name Storage Size Description Range smallint 2 bytes small-range integer -32768 to +32767 ...

  5. Oracle-表的字段增加修改删除操作

    表结构修改 ALTER TABLE SCOTT.TEST RENAME TO TEST1--修改表名 ALTER TABLE SCOTT.TEST RENAME COLUMN NAME TO NAME ...

  6. FastAdmin 如何隐藏操作栏中的“删除”按钮“?

    刚刚在群里看到有人询问如何隐藏(删除)操作栏中的”删除”按钮,如下这个. 我也不会,在论坛上也没找到,但有找到一篇关于根据条件怎么隐藏按钮的问题,Karson 老大有提供的解决方法.我就照样画葫芦写了 ...

  7. mysql 对表字段进行长度截取操作

    现在的问题是数据库某一个表中其中的车牌号字段有些数据多了一位,需要把它找出来然后把多的最后一位去掉..... 通过自带的length(字段名)函数把长度过长的数据过滤出来,其中,一个汉字算3个字符,一 ...

  8. PHP框架 fastadmin 根据条件判断字段的显示隐藏

    首先,因为fastadmin的JS里面字段不支持function函数  里面只能填false或true,不能动态判断显示隐藏, 后面通过看文档发现能在表格初始化的地方判断  如图,就可以实现根据lin ...

  9. cast()、decimal(M,D) --SQL对查询字段保留小数位操作

    参考:http://database.51cto.com/art/201005/201651.htm http://www.lai18.com/content/1693593.html 直接上例子,以 ...

随机推荐

  1. UVa 10570 Meeting with Aliens (暴力)

    题意:给定一个排列,每次可交换两个数,用最少的次数把它变成一个1~n的环状排列. 析:暴力题.很容易想到,把所有的情况都算一下,然后再选出次数最少的那一个,也就是说,我们把所有的可能的形成环状排列全算 ...

  2. meterpreter命令

    meterpreter详解与渗透实战 基本命令: background quit shell irb client.sys.config.sysinfo() 调用windows API:client. ...

  3. Python之模块和包学习

    模块简介 python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲突的问题.模块我们就可以理解为lib库,如果需要使用某个模块中的函数或对象 ...

  4. metasploitable实践

    使用Fimap和metasploitable2文件包含漏洞测试 fimap 首先查看msf已经存在的漏洞: root@kali:~# fimap -u 'http://192.168.136.130/ ...

  5. (模拟)Arithmetic Sequence -- HDU -- 5400

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=5400 Time Limit: 4000/2000 MS (Java/Others)    Memory ...

  6. 团体程序设计天梯赛L2-023 图着色问题 2017-04-17 09:28 269人阅读 评论(0) 收藏

    L2-023. 图着色问题 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 图着色问题是一个著名的NP完全问题.给定无向图 G ...

  7. Charles网络工具

    Charles 是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析. Charles 通过将自己设置成系统的网络访问代理服务器,使 ...

  8. Android-画板

    在上一篇博客,Android-图像原理/绘制原理,讲解到绘图原理中,画布 + 画笔

  9. Android-自定义仿QQ列表Item滑动

    效果图: 布局中去指定自定义FrameLayout: <!-- 自定义仿QQ列表Item滑动 --> <view.custom.shangguigucustomview.MyCust ...

  10. C#发送邮件(使用SSL,587端口)

    static readonly string smtpServer = System.Configuration.ConfigurationManager.AppSettings["Smtp ...