Mohon Saran: User Tidak Bisa Hapus Record Milik Sendiri di Beberapa Modul Odoo
Diposting pada 09 Apr 2026, 19:55
Ditanyakan oleh: Arif
Halo rekan-rekan praktisi Odoo di grup ini,
Saya Arif dari tim IT di perusahaan X, kebetulan kami pakai Odoo versi 14 Enterprise. Ada sedikit kendala yang ingin saya tanyakan terkait hak akses untuk menghapus record.
Jadi begini, beberapa user di departemen tertentu (misalnya Sales atau Project) melaporkan kalau mereka tidak bisa menghapus record yang mereka buat sendiri. Contohnya, user A membuat draft sales order, lalu ingin menghapus karena ada kesalahan atau tidak jadi. Tapi tombol 'Delete' tidak muncul atau tidak bisa diklik. Hal serupa terjadi juga di modul Timesheet atau Task.
Padahal user tersebut sudah kami berikan role 'User' di modul terkait, bahkan beberapa di antaranya punya akses 'Editor'. Sebagai Admin, saya bisa menghapus record tersebut, tapi kan tidak mungkin setiap ada request delete harus lewat Admin, terutama untuk data yang sifatnya draft dan dibuat sendiri oleh user.
Saya sudah coba cek di 'Access Rights' dan 'Security Rules' di Odoo, tapi belum ketemu konfigurasi yang pas agar user bisa delete own record saja, tanpa bisa delete record user lain. Atau mungkin ada trik khusus di group security?
Mungkin ada rekan-rekan yang punya pengalaman serupa atau tahu cara setting-nya agar user bisa menghapus record yang mereka buat sendiri? Mohon pencerahannya, terima kasih banyak sebelumnya!
Admin Odoo ForumAdmin & AI Support09 Apr 2026, 19:55
Halo Mas Arif, Sobat Odoo! Wah, terima kasih sudah sharing kendalanya di sini. Ini pertanyaan yang sering banget muncul dan memang penting banget lho, apalagi di lingkungan bisnis yang dinamis di mana user perlu fleksibilitas untuk mengelola data yang mereka buat sendiri.
Saya paham banget situasinya. Sebagai admin, memang tidak efektif kalau setiap ada record draft yang mau dihapus harus lewat admin. Odoo punya mekanisme yang pas kok untuk kasus seperti ini, yaitu kombinasi dari Access Rights dan Record Rules.
Mari kita bahas langkah-langkahnya agar user di tim Sales, Project, atau Timesheet bisa menghapus record milik mereka sendiri, terutama yang masih dalam status draft:
Penyebab Masalah:
Secara default, Odoo memang cenderung konservatif dalam memberikan hak akses 'Delete' untuk group non-admin pada banyak modul inti. Ini untuk mencegah penghapusan data yang tidak disengaja. Meskipun user sudah punya role 'User' atau 'Editor', hak 'Delete' ini seringkali masih sangat terbatas.
Solusi: Kombinasi Access Rights dan Record Rules
Untuk mengatasi ini, kita perlu mengatur dua hal di Odoo:
1. Pastikan Akses "Delete" di Level Model (Access Rights):
Ini adalah izin dasar untuk melakukan operasi 'Delete' pada suatu model. Tanpa ini, Record Rule tidak akan bisa memberikan akses 'Delete'.
Masuk ke Odoo sebagai Admin.
Aktifkan Developer Mode (biasanya ada di bagian kanan atas atau di Settings > General Settings paling bawah).
Pergi ke Settings > Technical > Security > Access Rights.
Cari model yang relevan:
Untuk Sales Order: Ketik "Sale Order" atau `sale.order`
Untuk Task: Ketik "Project Task" atau `project.task`
Untuk Timesheet: Ketik "Analytic Line" atau `account.analytic.line`
Pilih entri Access Right yang sesuai dengan Security Group yang digunakan oleh user Anda (misalnya: `Sales / User: All Documents`, `Project / User`, dll.).
Pastikan kotak centang Unlink (Delete) untuk group tersebut sudah aktif.
Peringatan: Mengaktifkan ini saja tanpa Record Rule bisa membuat user menghapus semua record di modul tersebut. Jadi, langkah kedua (Record Rules) sangat penting.
2. Batasi Akses "Delete" Hanya untuk Record Milik Sendiri (Record Rules):
Ini adalah bagian inti untuk mengatur agar user hanya bisa menghapus record yang mereka buat sendiri.
Masih di Developer Mode, pergi ke Settings > Technical > Security > Record Rules.
Buat `Record Rule` baru atau edit yang sudah ada. Mari kita buat baru untuk kejelasan:
Klik Create.
Name: Berikan nama yang jelas, contoh: "Allow Delete Own Draft Sale Order"
Object: Pilih model yang relevan (misalnya `sale.order` untuk Sales Order, `project.task` untuk Task, atau `account.analytic.line` untuk Timesheet).
Access Rights: Pastikan kotak centang Delete (Unlink) aktif. Anda juga bisa mengaktifkan Read, Write, Create jika rule ini juga mengatur akses lain untuk record milik sendiri.
Groups: Pilih Security Group yang user Anda miliki (misalnya `Sales / User: Own Documents Only` atau `Sales / User: All Documents`, `Project / User`, `Timesheets / User`).
Domain: Ini adalah bagian terpenting! Anda akan menentukan kondisi record mana yang boleh dihapus.
Untuk menghapus record milik sendiri saja:
`[('create_uid', '=', user.id)]`
Untuk menghapus record milik sendiri DAN yang berstatus 'Draft' saja (sangat direkomendasikan):
`['&', ('create_uid', '=', user.id), ('state', '=', 'draft')]`
Catatan untuk `state`:
Untuk `sale.order`: `state` biasanya `draft`, `sent`, `sale`, dst. Pilih `draft`.
Untuk `project.task`: Tidak ada `state` yang sama persis seperti SO. Anda bisa mempertimbangkan `stage_id.is_closed` (jika ada di Odoo 14) atau `stage_id.fold = False` (untuk stage yang tidak dilipat) atau `stage_id.name != 'Done'` untuk menghindari penghapusan task yang sudah selesai. Atau, jika user memang boleh menghapus tugas sendiri di status apa pun (selain yang sudah divalidasi/di-close), Anda bisa gunakan domain `[('create_uid', '=', user.id)]`.
Untuk `account.analytic.line` (Timesheet): Kadang ada `state` (draft, validated) atau cukup `[('create_uid', '=', user.id)]` jika user boleh menghapus entry timesheet-nya sendiri yang belum divalidasi atau dibayar.
Contoh Penerapan untuk Sales Order (Draft):
1. Pastikan group `Sales / User: All Documents` (atau group sales user lainnya) memiliki akses Unlink (Delete) di Settings > Technical > Security > Access Rights untuk model `sale.order`.
2. Buat `Record Rule` baru di Settings > Technical > Security > Record Rules:
Name: "Sales User Delete Own Draft SO"
Object: `sale.order`
Access Rights: Centang `Delete (Unlink)`
Groups: Pilih `Sales / User: All Documents` (atau group yang user Anda pakai)
Domain: `['&', ('create_uid', '=', user.id), ('state', '=', 'draft')]`
Tips Tambahan:
Uji Coba: Setelah menerapkan konfigurasi di atas, WAJIB untuk log in sebagai salah satu user yang terdampak dan coba hapus record draft yang ia buat sendiri. Pastikan tombol 'Delete' muncul dan bisa diklik, serta user tidak bisa menghapus record milik orang lain atau record yang statusnya bukan draft.
Security Groups: Pastikan Anda memilih Security Group yang tepat. Kadang ada beberapa group untuk satu modul (misalnya `Sales / User: Own Documents Only` dan `Sales / User: All Documents`). Terapkan Record Rule pada group yang paling relevan untuk user Anda.
Default Rules: Odoo sudah punya banyak Record Rules default. Pastikan rule yang Anda buat tidak bertabrakan dengan rule lain yang lebih membatasi. Biasanya, jika ada beberapa Record Rules yang berlaku, Odoo akan menggabungkannya dengan logika AND.
Semoga panduan ini membantu Mas Arif dan tim IT di perusahaan X untuk mengatasi kendala hak akses penghapusan record ini ya. Jangan sungkan untuk bertanya lagi kalau ada yang kurang jelas atau butuh bantuan lebih lanjut! Selamat mencoba!