天天看點

Openerp管理權限的方法

OpenERP 管理權限的方法非常靈活,核心在于組. 

你屬于哪個組決定了:

每個菜單項的可見性

資料庫中的每個表的可通路性

OpenERP中的組,在每個子產品下的 security 目錄下的檔案:xxx_security.xml、ir.model.access.csv定義。

x_security.xml  檔案定義組群組對菜單的通路權限

ir.model.access.csv  定義組對對象的權限矩陣。

---------------------

x_security.xml 的介紹

---------------------

<record id="group_product_manager"  model="res.groups"> 

    <field name="name">旅遊産品經理</field> 

</record>

<record model='ir.ui.menu' id='menu_seat_management'>

   <field name="groups_id" eval="[(6,0,[ref('group_product_manager')])]"/> 

</record> 

第一條-導入一條記錄到資料表 res_groups,該條記錄的 name 字段為“旅遊産品經理”。id="group_product_manager" 是本條記錄的标志,在子產品範圍内必須唯一。 

第二條-在資料表 ir_ui_menu 中導入一條記錄,意思是id=group_sale_manager的組,對id=menu_shop_configuration 的菜單有通路權限。

(model="res.groups",表示對象 res.groups,該對象實際就是資料庫的資料表 res_groups)

---------------------------

ir.model.access.csv 的介紹

---------------------------

Defining Access Rights(ir.model.access.csv) 

"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" 

"access_product_product_user","product.product.user","model_product_product",         "base.group_user",1,0,0,0 

"access_product_product_manager","product.product.manager","model_product_product",   "product.group_product_manager",1,1,1,1

該兩行定義了組 base.group_user、product.group_product_manager 對對象 model_product_product 的讀、寫、建、删的權限。

many2many

(0,0,{values}) 根據values裡面的資訊建立一個記錄。

(1,ID,{values})更新id=ID的記錄(寫入values裡面的資料)

(2,ID) 删除id=ID的資料(調用unlink方法,删除資料以及整個主從資料連結關系)

(3,ID) 切斷主從資料的連結關系但是不删除這個資料

(4,ID) 為id=ID的資料添加主從連結關系。

(5) 删除所有的從資料的連結關系就是向所有的從資料調用(3,ID)

(6,0,[IDs]) 用IDs裡面的記錄替換原來的記錄(就是先執行(5)再執行循環IDs執行(4,ID))

例子[(6, 0, [8, 5, 6, 4])] 設定 many2many to ids [8, 5, 6, 4]

one2many

(0, 0,{ values })根據values裡面的資訊建立一個記錄。

(1,ID,{values}) 更新id=ID的記錄(對id=ID的執行write 寫入values裡面的資料)

(2,ID) 删除id=ID的資料(調用unlink方法,删除資料以及整個主從資料連結關系)

例子:

[(0,0,{'field_name':field_value_record1,...}),(0,0,{'field_name':field_value_record})]

many2one的字段比較簡單,直接填入已經存在的資料的id或者填入False删除原來的記錄。

隐藏的常用技巧

* 直接隐藏

 <group name="owner" position="attributes">

        <attribute name="invisible">True</attribute>

          </group>

* 滿足某些條件的隐藏

         <xpath expr="//field[@name='parent_id']" position='attributes'>

             <attribute name="attrs">{'invisible': [('passenger','=', True)]}</attribute>

         </xpath>

<group col="4" string='旅客資訊' attrs="{'invisible': [('supplier','=', True)]}">

</group>

* 通過組來隐藏 

<xpath expr="//field[@name='type']" position="attributes">

                <attribute name="groups">base.group_no_one</attribute>

         </xpath>

* 菜單的隐藏

 <record model="ir.ui.menu" id="crm.menu_crm_opportunities">

        <field eval="[(6,0, [ref('base.group_no_one'),])]" name="groups_id"/>

     </record>