博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过view实现字段的只读、隐藏操作【转】
阅读量:6081 次
发布时间:2019-06-20

本文共 2142 字,大约阅读时间需要 7 分钟。

原文地址: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])]: 看这里 

再想

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

转载地址:http://jlzwa.baihongyu.com/

你可能感兴趣的文章
Hive Export和Import介绍及操作示例
查看>>
http://mongoexplorer.com/ 一个不错的 mongodb 客户端工具。。。
查看>>
Xcode 4.3 使用xcodebuild命令编译项目环境设置
查看>>
上传jar包到nexus私服
查看>>
Why Namespace? - 每天5分钟玩转 OpenStack(102)
查看>>
Project:如何分析项目中的资源分配情况
查看>>
HDU 4803 Poor Warehouse Keeper (贪心+避开精度)
查看>>
python全栈_011_Python3基本数据类型--字典
查看>>
json
查看>>
linux tomcat 用/etc/init.d/tomcat start启动报错
查看>>
高性能javascript学习笔记系列(2)-数据存取
查看>>
Spark之scala
查看>>
JSON使用
查看>>
Java 一些缩写的解释
查看>>
监控HTTP(1)
查看>>
python 操作PostgreSQL
查看>>
POJ1465:Multiple(BFS)
查看>>
使用框架页面的跳转 转
查看>>
php lock_sh共享锁 与 lock_ex排他锁
查看>>
codeigniter 对数据库的常用操作
查看>>