在odoo中新建兩個用戶user1,user2
建完了用戶赖草,記得編輯用戶闹究,設置密碼狈孔。
然后以user1用戶登錄系統(tǒng),在導航菜單中我們看不到請假
菜單奴迅,因為我們沒有給user1這個用戶請假模塊的權(quán)限青责。編輯security/ir.model.access.csv
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_qingjia_qingjiadan,qingjia.qingjiadan,model_qingjia_qingjiadan,base.group_user,1,1,1,1
id
權(quán)限id,默認規(guī)則是access_模塊名_類名
取具,還沒發(fā)現(xiàn)有什么用
name
權(quán)限名脖隶,默認規(guī)則是模塊名.類名
,還沒發(fā)現(xiàn)有什么用
model_id:id
這個是固定寫法暇检,規(guī)則是model_模塊名_類名
产阱,其它地方引用權(quán)限會用這個id
group_id:id
組id,這里的base.group_user
是系統(tǒng)內(nèi)置組,即員工.員工
組块仆,創(chuàng)建帳戶時构蹬,默認屬于這個組王暗。所以給這個組賦權(quán)限,相當于給新帳戶的默認權(quán)限庄敛。
perm_read,perm_write,perm_create,perm_unlink
對應讀俗壹、寫、增加铐姚、刪除權(quán)限策肝,1是有權(quán)限肛捍,0是無權(quán)限隐绵,具體根據(jù)需要來設置權(quán)限
編輯__manifest__.py
# -*- coding: utf-8 -*-
{
'name': "qingjia",
'summary': """
請假模塊""",
'description': """
請假模塊
""",
'author': "leo",
'website': "http://www.yourcompany.com",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
# for the full list
'category': 'Uncategorized',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['base'],
# always loaded
'data': [
'security/ir.model.access.csv',
'views/views.xml',
'views/templates.xml',
],
# only loaded in demonstration mode
'demo': [
'demo/demo.xml',
],
'application': True,
}
在'data':[]
中添加權(quán)限文件 'security/ir.model.access.csv'
,
新增一行'application': True,
這樣在應用中默認能搜索到請假單模塊,因為應用列表默認使用應用
過濾器的拙毫。
以管理員身份登錄系統(tǒng)依许,在應用>應用查找qingjia模塊。然后升級缀蹄。
使用user1用戶登錄系統(tǒng)峭跳,現(xiàn)在可以看到請假
菜單了。新建一個請假單缺前≈恚看起來功能正常。然后我們用user2登錄系統(tǒng)衅码。也可以看到這個請假單拯刁。如果我們希望用戶只能看到自己的請假單,如何做呢逝段,修改代碼views/views.xml
<openerp>
<data>
<!-- tree視圖 -->
<record id="view_tree_qingjia_qingjiadan" model="ir.ui.view">
<field name="name">請假單列表</field>
<field name="model">qingjia.qingjiadan</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="days"/>
<field name="startdate"/>
</tree>
</field>
</record>
<!-- form視圖 -->
<record id="view_form_qingjia_qingjiadan" model="ir.ui.view">
<field name="name">請假單</field>
<field name="model">qingjia.qingjiadan</field>
<field name="arch" type="xml">
<form>
<sheet>
<group name="group_top" string="請假單">
<field name="name"/>
<field name="days"/>
<field name="startdate"/>
<field name="reason"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- 視圖動作 -->
<act_window id="action_qingjia_qingjiadan"
name="請假單"
res_model="qingjia.qingjiadan"
view_mode="tree,form" />
<!-- 頂級菜單 -->
<menuitem name="請假" id="menu_qingjia"/>
<!-- 二級菜單 -->
<menuitem name="請假單" id="menu_qingjia_qingjiadan" parent="menu_qingjia" action="action_qingjia_qingjiadan"/>
<!--record 規(guī)則 -->
<record id="rule_user_qingjia_qingjiadan" model="ir.rule">
<field name="name">自己編輯自己的請假單</field>
<field name="model_id" ref="model_qingjia_qingjiadan" />
<field name="domain_force">[('create_uid','=',user.id)]</field>
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
</record>
</data>
</openerp>
增加了一個record 規(guī)則垛玻,幾個關鍵屬性
model_id
模塊id,對應ir.model.access.csv
文件中定義的model_id
domain_forc
domain表達式奶躯,'create_uid'
是qiangjia_qingjiadan
表的字段帚桩,在insert數(shù)據(jù)時,odoo自動寫入添加用戶的id嘹黔。user.id
是當前用戶id账嚎。這個domain表達式的含義就是請假單數(shù)據(jù)的添加用戶id等于當前用戶id.
groups
組id,base.group_user
前面說過,是系統(tǒng)內(nèi)置的員工組的外部id
再次升級請假模塊儡蔓,現(xiàn)在user1郭蕉、user2都只能看到自己的請假單,管理員可以看到全部的請假單浙值。odoo管理員默認擁有全部權(quán)限恳不。
總結(jié)下odoo權(quán)限分級:
- 第一級是access rule,即表級權(quán)限开呐,控制用戶組對表的訪問權(quán)限烟勋,一般是用
security/ir.model.access.csv
文件來管理 - 第二級是record rule规求,即行級權(quán)限,控制用戶組對表中數(shù)據(jù)行的訪問權(quán)限卵惦,可以寫在
views/views.xml
文件中 - 其實還有第三級權(quán)限阻肿,是字段級權(quán)限,之后再學習沮尿。