Pada tutorial Pengaturan Hak Akses Berdasarkan Grup User di Odoo, kita sudah membahas menampilkan grup dengan tampilan dropdown list. Efek dari tampilan dropdown list, kita hanya memiliki satu pilihan dalam hak akses.
Sekarang kita akan mencoba membuat grup dengan konsep yang berbeda.
Ubah record xml untuk model res.groups di Odoo.
Ubah record xml untuk model res.groups menjadi seperti dibawah ini.
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<!--
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_dropdown">
<field name="name">Tutor Access Right</field>
<field name="description">Akses user untuk modul cj_tutor_access_right</field>
</record>
<!-- access right berbentuk dropdown -->
<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_dropdown"/>
</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_dropdown"/>
<!--
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"'....'
-->
<field name="implied_ids" eval="[(4, ref('cj_tutor_access_right.group_employee'))]"/>
</record>
<record model="res.groups" id="cj_tutor_access_right.group_direktur">
<field name="name">Direktur</field>
<field name="category_id" ref="access_right_category_dropdown"/>
<!-- referensi implied_ids harus id record sebelumnya
yaitu cj_tutor_access_right.group_manager -->
<field name="implied_ids" eval="[(4, ref('cj_tutor_access_right.group_manager'))]"/>
</record>
<!-- end of - access right berbentuk dropdown -->
<!-- access right berbentuk checkbox -->
<record model="ir.module.category" id="access_right_category_checkbox">
<field name="name">Kewenangan User</field>
<field name="description">Kewenangan User untuk model cj_tutor.access_right</field>
</record>
<record model="res.groups" id="cj_tutor_access_right.group_valid">
<field name="name">Can Validate</field>
<field name="category_id" ref="access_right_category_checkbox"/>
</record>
<record model="res.groups" id="cj_tutor_access_right.group_refuse">
<field name="name">Can Refuse</field>
<field name="category_id" ref="access_right_category_checkbox"/>
</record>
</data>
</odoo>
Ada beberapa catatan yang bisa dilihat pada kode diatas. Catatan singkatnya adalah:
Dropdown list pada grup user diakibatkan oleh “implied_ids“.
Jika tidak menggunakan “implied_ids” maka hasil tampilannya menjadi checkbox
Agar menjadi dropdown list, referensi “implied_ids” haruslah id dari record sebelumnya.
Jika kita memilih role yang paling bawah dari dropdown list user grup, maka otomatis role diatasnya juga terpilih. Misal jika user diset sebagai ‘direktur’ maka user tersebut secara otomatis juga merupakan ‘manager’ dan ‘karyawan’.
Hasil dari kode diatas bisa dilihat pada gambar dibawah ini.
Odoo user manage
Ubah model dan view xml dari cj_tutor.access_right.
Sekarang ubah model cj_tutor.access_right menjadi seperti kode dibawah ini.
from odoo import models, fields, api
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"),
('refuse', "Refuse"),
], string="Status", default='draft')
@api.multi
def action_draft(self):
self.state = 'draft'
@api.multi
def action_valid(self):
self.state = 'valid'
@api.multi
def action_refuse(self):
self.state = 'refuse'
Ubah view xml dari model cj_tutor.access_right.
Ubah view xml dari model cj_tutor.access_right menjadi seperti kode dibawah ini.
<?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>
<!-- button hanya tampil jika state = 'valid' atau state = 'refuse'
dan semua user bisa mengaksesnya -->
<button type="object" name="action_draft" string="Set to Draft" states="valid,refuse"/>
<!-- button hanya tampil jika state = 'draft'
dan hanya user yang punya kewenangan "Can Validate"
yang bisa mengaksesnya -->
<button type="object" name="action_valid" string="Validate" groups="cj_tutor_access_right.group_valid" states="draft"/>
<!-- button hanya tampil jika state = 'draft'
dan hanya user yang punya kewenangan "Can Refuse"
yang bisa mengaksesnya -->
<button type="object" name="action_refuse" string="Refuse" groups="cj_tutor_access_right.group_refuse" states="draft,valid"/>
<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)]</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>
Saya harap anda membaca dulu beberapa keterangan yang ada di kode view diatas. Ada beberapa perbedaan dibanding view xml pada tutorial sebelumnya. Yang paling perlu diperhatikan adalah, ada penambahan beberapa <button> yang ada di <header>.
Button “Set to Draft”, bisa tampil di semua user. Tapi hanya tampil pada state = ‘valid’ atau state = ‘refuse’.
Button “Validate”, hanya tampil di user yang punya kewenangan “Can Validate”, dan hanya tampil pada state = ‘draft’.
Button “Refuse”, hanya tampil di user yang punya kewenangan “Can Refuse”, dan tampil pada state = ‘draft’ atau state = ‘valid’.
Hasilnya bisa dilihat pada gambar dibawah ini.
Pada gambar diatas bisa dilihat, bahwa pada user “Administrator” muncul dua tombol yaitu “Validate” dan “Refuse” karena user “Administrator” punya kewenangan “Can Validate” dan “Can Refuse”. Sedangkan pada “Demo User” hanya muncul tombol “Validate” saja, karena “Demo User” hanya punya kewenangan “Can Validate”.
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Strictly Necessary Cookies
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.
Ping-kembali: Pengaturan Hak Akses Berdasarkan Grup User di Odoo - Cak Juice
Ping-kembali: Pengaturan Odoo Hak Akses - Cak Juice
Ping-kembali: Pengaturan Record Rule Odoo Berdasarkan Grup User - Cak Juice