程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Python >> 通過view實現字段的只讀、隱藏操作

通過view實現字段的只讀、隱藏操作

編輯:Python

在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字段後,視圖的疊加方式將要改變。相信各位看到這裡也差不多能明白了。對的!現在不同用戶登陸,疊加的視圖會根據你當前用戶組來選擇。不同用戶看到的視圖可以完全不一樣。情況如下圖:

OpenERP view group 示意圖

詳細代碼可以看。

#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來實現)

怎麼用?

        <</code>record id="view_order_form_editable_list" model="ir.ui.view">             <</code>field name="name">sale.order.form.editable.list</</code>field>             <</code>field name="model">sale.order</</code>field>             <</code>field name="inherit_id" ref="sale.view_order_form"/>             <</code>field name="groups_id" eval="[(6, 0, [ref('product.group_uos'), ref('product.group_stock_packaging'), ref('sale.group_mrp_properties')])]"/>             <</code>field name="arch" type="xml">                 <</code>xpath expr="//field[@name='order_line']/tree" position="attributes">                     <</code>attribute name="editable"/>                 </</code>xpath>             </</code>field>         </</code>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…)。所以要完善的權限配置我們還必須配合各種權限規則來組合使用:

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

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved