Pengaturan Odoo Hak Akses

Hak akses berdasarkan grup user, mungkin ini agak membingungkan untuk beberapa developer yang masih awam tentang konsep hak akses di Odoo. Pada intinya adalah, setiap user yang mengakses aplikasi mempunyai grup tersendiri. Dengan melakukan pengaturan grup user kita bisa membedakan tampilan menu berdasarkan grup, membatasi akses user terhadap model, dan masih banyak lagi.

Sebagai pengenalan, silakan baca link referensi ini terlebih dahulu.

Kali ini saya akan membuat tutorial dengan skenario sebagai berikut.

  • Ada beberapa user yang tergabung dalam grup karyawan, dan ada beberapa user lain yang tergabung dalam grup manager.
  • Pada grup karyawan hanya bisa mengakses data yang diinput oleh dirinya sendiri, sedangkan pada grup manager bisa mengakses data yang diinput oleh semua karyawan.

Buat modul baru di Odoo.

Untuk mempermudah, kita buat modul baru saja, agar kita bisa belajar tentang hak akses dengan benar. Modul baru ini saya beri nama “cj_tutor_access_right”. Lalu kita aktifkan debug mode.

Buat beberapa user baru.

Sebelum melangkah ke pengaturan grup, kita buat beberapa user baru. Masuk ke menu “Settings” → “Users” → “Users”. Hasil penambahan user baru bisa dilihat pada gambar dibawah.

Untuk tampilan form bisa dilihat seperti gambar dibawah ini.

Buat grup user baru.

Untuk membuat grup user baru, bisa masuk ke menu “Settings” → “Users” → “Groups”. Di menu tersebut kita bisa membuat grup dengan cara manual. Akan tetapi, saya tidak menyarankan developer untuk menggunakan menu UI ini.

Untuk developer kita juga bisa dengan membuat grup dengan cara membuat xml record. Buat file berekstensi xml, lalu buat xml record seperti kode dibawah ini. Jangan lupa menambahkan nama file pada manifest.

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
	<data>
		<!-- access right berbentuk dropdown -->

		<!-- 
			Buat kategori baru terlebih dahulu,
			pada UI groups, "ir.module.category" adalah fields
			yang mempunyai string "Application"
		-->
		<record model="ir.module.category" id="access_right_category">
			<field name="name">Tutor Access Right</field>
			<field name="description">Akses user untuk modul cj_tutor_access_right</field>
		</record>

		<record model="res.groups" id="cj_tutor_access_right.group_employee">
			<field name="name">Karyawan</field>
			<!-- category_id diisi berdasarkan kategori yang sudah dibuat diatas -->
			<field name="category_id" ref="access_right_category"/>
		</record>

		<record model="res.groups" id="cj_tutor_access_right.group_manager">
			<field name="name">Manager</field>
			<field name="category_id" ref="access_right_category"/>
			<!--
				implied_ids adalah untuk mengatur group lain yang ter-implikasi,
				dari group yang baru dibuat ini.
				Efeknya adalah, jika user diset sebagai anggota grup manager,
				maka otomatis dia adalah anggota grup karyawan.
				Jika tidak ingin seperti itu maka kita bisa mengabaikan field ini.
				Field implied_ids bisa dilihat di tab "Inherited" pada form group.
				Isi field dengan 'eval', untuk meng-evaluasi nilai defaultnya.
				Untuk memahami mengapa ada nilai 4, silakan buka link,
				https://www.odoo.com/documentation/10.0/reference/orm.html#model-reference,
				baca mulai tulisan 'One2many and Many2many use a special "commands" format to ....'
			-->
			<field name="implied_ids" eval="[(4, ref('cj_tutor_access_right.group_employee'))]"/>
		</record>
		<!-- end of - access right berbentuk dropdown -->
	</data>
</odoo>

Bagi saya lebih mudah dan cepat membuat xml record daripada harus membuat record melalui UI. Ada beberapa keterangan yang saya tulis di kode diatas, mohon dipahami terlebih dahulu, agar tidak bingung dalam memahami model res.groups ini.

Di kode diatas kita juga melihat ada eval=”[(4, ref(‘cj_tutor_access_right.group_employee’))]”, Untuk memahami mengapa ada nilai 4, silakan buka link referensi ini, baca mulai tulisan ‘One2many and Many2many use a special “commands” format to .…‘.

Hasil dari record diatas bisa dilihat seperti gambar dibawah ini.

Odoo hak akses
Odoo hak akses

Atur grup yang dimiliki oleh user.

Untuk mengatur grup oleh user silakan masuk ke “Settings” → “Users” → “Users”. Sekarang ada field baru yang berbentuk dropdown “Tutor Access Right” pada tab “Access Rights”.

Pada user “Administrator” dan “Demo User” saya atur grupnya pada “Manager”, sedangkan user “Demo User 2” saya atur grupnya pada “Karyawan”.

Untuk mengecek user sebagai anggota dari grup, bisa dilihat di menu “Settings” → “Users” → “Groups”, lalu pilih grup dan lihat pada tab “Users”. Contohnya bisa dilihat pada gambar dibawah.

Buat model dummy.

Buat sebuah model dummy untuk mencoba grup yang baru dibuat.

class CJTutorAccessRight(models.Model):
	_name = 'cj_tutor.access_right'

	name = fields.Char(string="Nama", size=128, required=True)
	description = fields.Text(string="Description")
	state = fields.Selection([
		('draft', "Draft"),
		('valid', "Valid"),
	], string="Status", default='draft')

Buat juga xml view dari model diatas.

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
	<data>
		<!-- hanya cj_tutor_access_right.group_employee yang bisa mengakses -->
		<menuitem id="menu_access_right" name="Menu Tutor Hak Akses" groups="cj_tutor_access_right.group_employee"/>

		<record model="ir.ui.view" id="view_tutor_access_tree">
			<field name="name">cj_tutor.access_right.tree</field>
			<field name="model">cj_tutor.access_right</field>
			<field name="arch" type="xml">
				<tree>
					<field name="name"/>
					<field name="description"/>
					<field name="state"/>
				</tree>
			</field>
		</record>

		<record model="ir.ui.view" id="view_tutor_access_form">
			<field name="name">cj_tutor.access_right.form</field>
			<field name="model">cj_tutor.access_right</field>
			<field name="arch" type="xml">
				<form>
					<header>
						<field name="state" widget="statusbar"/>
					</header>
					<sheet>
						<group>
							<field name="name"/>
							<field name="description"/>
						</group>
					</sheet>
				</form>
			</field>
		</record>

		<record model="ir.actions.act_window" id="action_view_tutor_access_karyawan">
			<field name="name">Menu Tutor Hak Akses Karyawan</field>
			<field name="res_model">cj_tutor.access_right</field>
			<field name="view_type">form</field>
			<field name="view_mode">tree,form</field>
			<field name="domain">['|', ('create_uid', '=', uid), ('write_uid', '=', uid)]</field>
		</record>

		<!-- hanya cj_tutor_access_right.group_employee yang bisa mengakses,
		dan hanya menampilkan data yang diinput oleh user itu sendiri -->
		<menuitem id="menu_access_right_karyawan" action="action_view_tutor_access_karyawan" parent="menu_access_right" sequence="1" groups="cj_tutor_access_right.group_employee"/>

		<record model="ir.actions.act_window" id="action_view_tutor_access_manager">
			<field name="name">Menu Tutor Hak Akses Manager</field>
			<field name="res_model">cj_tutor.access_right</field>
			<field name="view_type">form</field>
			<field name="view_mode">tree,form</field>
		</record>

		<!-- hanya cj_tutor_access_right.group_manager yang bisa mengakses -->
		<menuitem id="menu_access_right_manager" action="action_view_tutor_access_manager" parent="menu_access_right" sequence="2" groups="cj_tutor_access_right.group_manager"/>
	</data>
</odoo>

Pada kode diatas bisa dilihat ada menuitem yang mempunyai properti ‘groups’. Properti ‘groupshanya digunakan untuk membatasi hak akses ke menuitem saja, tetapi tidak membatasi ke model. Untuk membatasi hak akses user pada model, bisa menggunakan “Access Control List”. “Access Control List” bisa kita edit di file security/ir.model.access.csv.

Ubah file security/ir.model.access.csv

Buka file security/ir.model.access.csv ubah menjadi seperti dibawah ini. Jangan lupa tambahkan file pada manifest.

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_cj_tutor_access_right_employee,cj_tutor_access_right.employee,model_cj_tutor_access_right,cj_tutor_access_right.group_employee,1,1,1,0
access_cj_tutor_access_right_manager,cj_tutor_access_right.manager,model_cj_tutor_access_right,cj_tutor_access_right.group_manager,1,1,1,1

Saya sarankan untuk menggunakan aplikasi Libre Office saja saat melakukan edit di file yang berekstensi *.csv.

Keterangan file security/ir.model.access.csv:

  • id = id dari record Access Control List, isinya bisa sembarang, tergantung kebiasaan anda
  • name = name dari record Access Control List, , isinya bisa sembarang juga
  • model_id = nama model yang akan dibatasi, aturan penulisannya model_namamodel. Jika nama model mempunyai karakter titik (.) ubah dengan underscore (_).
  • group_id = id grup user yang akan dibatasi
  • perm_read = permission (ijin) untuk membaca record, bernilai 1 (true) atau 0 (false)
  • perm_write = permission (ijin) untuk mengubah record, bernilai 1 (true) atau 0 (false)
  • perm_create = permission (ijin) untuk membuat record, bernilai 1 (true) atau 0 (false)
  • perm_unlink = permission (ijin) untuk menghapus record, bernilai 1 (true) atau 0 (false)

Selain melalui file security/ir.model.access.csv kita bisa menambahkan akses kontrol di menu “Settings” → “Security” → “Access Control List”.

Setelah langkah – langkah diatas dijalankan, maka hasilnya bisa dilihat pada gambar dibawah ini.

Pada gambar di atas, user “Demo User” tampil 2 menu yaitu menu karyawan dan menu manager. Sedangkan pada user “Demo User 2” hanya tampil 1 menu yaitu menu karyawan.

Input data dummy.

Sekarang kita input beberapa data untuk percobaan, dengan menggunakan user “Demo User” dan “Demo User 2”.

Pada gambar di atas, user “Demo User” menu karyawan hanya menampilkan data inputan sendiri. Sedangkan pada menu manager menampilkan data inputan semua user. Pada user “Demo User” juga mempunyai akses untuk menghapus record. Sedangkan pada user “Demo User 2”, tidak mempunyai akses untuk menghapus record.

Sekian, selamat mencoba. Semoga bermanfaat.

Baca juga:

Comments

3 komentar untuk “Pengaturan Odoo Hak Akses”

  1. Ping-kembali: Tips dan Trik Pengaturan Grup User di Odoo - Cak Juice

  2. Ping-kembali: Pengaturan Record Rule Berdasarkan Grup User di Odoo - Cak Juice

  3. Ping-kembali: Pengaturan Odoo Grup User - Cak Juice

Komentar ditutup.