[Odoo 10] Technical Documentation -Part 9-

Alhamdulillah kita bisa melanjutkan kembali materi ini, untuk selanjutnya kita akan membahas tentang security di Odoo. Pembahasan workflow kita lewatkan karna pada versi 10 ini, fitur workflow telah dihapus. Dan kita cukupkan dengan field state untuk melihat progress suatu document. Diantara fungsi/policy security yang bisa kita manfaatkan adalah :

1. Mengatur akses menu, tab, field, button, dll berdasarkan group
2. Mengatur akses object atau model sampai tingkat CRUD (Create, Read, Update, Delete)
3. Mengatur akses record atau data suatu object berdasarkan group atau user (User A hanya bisa melihat data diri sendiri, User B dapat melihat data User C, D, dst)

Fitur security pada Odoo dibagi menjadi 2, yaitu Access Right dan Record Rules. Kedua fitur ini sangat bermanfaat dan saling melengkapi untuk bisa menghasilkan point-point diatas. Sebuah groups memiliki keterkaitan terhadap 2 hal ini. Jika kita tidak mendefinsikan group pada kedua hal ini, maka Access Right dan Record Rules berlaku kepada semua group.

Untuk yang pertama kita akan membahas Access Right.

A. Access Right

Jika kita sering melihat file ir.model.access.csv di suatu direktori modul Odoo, maka itu adalah cara untuk mendefinisikan access right. Selain itu, access right juga dapat kita definisikan sebagaimana pembuatan record. Kita bisa langsung menginputnya pada menu Setting > Security > Access Controls List atau pada menu Setting > Groups di tab Access Right.

Access Right sangat erat kaitannya dengan model atau object. Fitur ini fungsi utamanya untuk mengatur akses ‘permissions’ object atau model seperti Create, Read, Update, dan Delete kepada setiap groups. Hal pertama yang kita lakukan adalah membuat group dengan langkah-langkah berikut :

1. Buat file baru dengan nama security.xml di folder security
2. Isi file security.xml dengan code di bawah ini :


<?xml version="1.0" encoding="utf-8"?>
<odoo>
    
	<record id="group_training_create" model="res.groups">
		<field name="name">Training / Akses Create</field>
	</record>
		
	<record id="group_training_read" model="res.groups">
		<field name="name">Training / Akses Read</field>
	</record>
	
	<record id="group_training_update" model="res.groups">
		<field name="name">Training / Akses Update</field>
	</record>
	
	<record id="group_training_delete" model="res.groups">
		<field name="name">Training / Akses Delete</field>
	</record>
		
	
	
	<record id="group_training_user" model="res.groups">
		<field name="name">Training / User</field>
	</record>
	
	<record id="group_training_manager" model="res.groups">
		<field name="name">Training / Manager</field>
        <field name="implied_ids" eval="[(4, ref('training_odoo.group_training_user'))]"/>
        <field name="users" eval="[(4, ref('base.user_root'))]"/>
	</record>
	
</odoo>


Pada file di atas kita membuat 6 groups yaitu :

Training / Akses Create
Training / Akses Read
Training / Akses Update
Training / Akses Delete
Training / User
Training / Manager

Group Training / Manager menginherit group Training / User, sehingga apapun yang bisa dilakukan oleh group user, maka bisa dilakukan group manager. Dan group manager otomatis kita tambahakan ke user administrator.

3. Update file __manifest__.py pada key dictionary berikut :



    # always loaded
    'data': [
        'security/security.xml',
        'security/ir.model.access.csv',
        'views/views.xml',
        'views/templates.xml',
        'views/partner.xml',
    ],


4. Update file ir.model.access.csv di folder security seperti berikut :


id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
kursus_user,kursus.user,model_training_kursus,group_training_user,1,1,1,1
sesi_user,sesi.user,model_training_sesi,group_training_user,1,1,1,1
kursus_create,kursus.create,model_training_kursus,group_training_create,1,0,1,0
kursus_read,kursus.read,model_training_kursus,group_training_read,1,0,0,0
kursus_update,kursus.update,model_training_kursus,group_training_update,1,1,0,0
kursus_delete,kursus.delete,model_training_kursus,group_training_delete,1,0,0,1
sesi_create,sesi.create,model_training_sesi,group_training_create,1,0,1,0
sesi_read,sesi.read,model_training_sesi,group_training_read,1,0,0,0
sesi_update,sesi.update,model_training_sesi,group_training_update,1,1,0,0
sesi_delete,sesi.delete,model_training_sesi,group_training_delete,1,0,0,1

Pada file diatas, kita menambahkan hak akses seperti berikut :

Training / Akses Create : read dan create
Training / Akses Read : read
Training / Akses Update : read dan update
Training / Akses Delete : read dan delete
Training / User : read, create, update, dan delete

Untuk mencoba dan mensimulasikannya, silahkan membuat 1 user baru, dan masukan ke salah satu group secara bergantian sampai semua group. Dan silahkan perhatikan perbedaaanya.

B. Record Rules

Record rules berfungsi untuk memberikan batasan terhadap hak akses kumpulan record suatu model. Kita bisa membuat record rules langsung dari menu Setting > Security > Record Rules atau seperti biasa kita gunakan xml yang membuatnya. Pada field domain inilah pembatasan akses right dilakukan. Sekarang kita akan buat record rule untuk model kursus seperti berikut :

1. Group Training / User : hanya bisa melihat kursus yang responsiblenya diri sendiri
2. Group Training / Manager : bisa melihat semua kursus tanpa memperdulikan responsiblenya

Sekarang kita update file security.xml kita seperti berikut (tambahkan dari bawah) :



	
	<record id="kursus_see_own_rule" model="ir.rule">
        <field name="name">Own Kursus</field>
        <field name="model_id" ref="model_training_kursus"/>
        <field name="domain_force">['|',('responsible_id','=',user.id),('responsible_id','=',False)]</field>
        <field name="groups" eval="[(4, ref('group_training_user'))]"/>
    </record>
    
    <record id="kursus_see_all_rule" model="ir.rule">
        <field name="name">All Kursus</field>
        <field name="model_id" ref="model_training_kursus"/>
        <field name="domain_force">[(1,'=',1)]</field>
        <field name="groups" eval="[(4, ref('group_training_manager'))]"/>
    </record>
	
	

Untuk mensimulasikannya, silahkan masukan user yang telah kita buat ke group Training / User dan group Training / Manager secara bergantian, dan perhatikan perbedaannya.

Access right juga bisa kita tentukan di record rules ini, tetapi dia tidak akan menjadi prioritas. Prioritas tetap access right di group, kecuali kita tidak membuatnya di group, maka kita bisa buat di record rule.

Untuk memfilter label, div, menu, tab, field, button, dll berdasarkan group, maka kita bisa tambahkan attribute groups pada element terkait, seperti contoh berikut :


<div groups="account.group_account_manager" class="row o_kanban_card_settings">

<label for="currency_id" groups="base.group_multi_currency"/>
                            
<field name="account_id" groups="account.group_account_user"/>

<button name="action_invoice_open" type="object" states="draft" string="Validate" groups="account.group_account_invoice"/>

<menuitem id="menu_board_journal" name="Dashboard" action="open_journal_dashboard" parent="menu_finance" groups="group_account_user"/>

<page string="Analytic Lines" groups="analytic.group_analytic_accounting">


InsyaAllah untuk pertemuan kali ini kita cukupkan sampai disini, bagi yang ingin mendownload modul hasil tutorial ini bisa disini
Semoga bermanfaat, CMIIW …

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s