Files

GRT Purchase Business Category

Ringkasan

grt_purchase_business_category menambahkan segregasi Business Category pada proses Purchasing.

Cakupan utama:

  • Purchase Order per business category
  • Purchase Team per business category
  • propagasi analytic account pembelian
  • pembatasan akses berdasarkan effective_business_category_ids

Dependensi

  • purchase
  • account
  • grt_business_category_base

Model Utama

purchase.order

Penambahan utama:

  • business_category_id
  • analytic_account_id
  • purchase_team_id
  • payment_status

Perilaku utama:

  • category dapat mengikuti purchase_team_id
  • analytic account mengikuti setting category
  • validasi company/category/team dijaga ketat

purchase.team

Model team purchasing per category.

Field utama:

  • name
  • company_id
  • business_category_id
  • user_id
  • member_ids

Security Rule

Model yang dibatasi category:

  • purchase.order
  • purchase.team
  • crm.business.category (scope purchase)
  • account.move (purchase business category)
  • account.move.line (purchase business category)

Prinsip akses:

  • user hanya bisa melihat data pada company + effective_business_category_ids
  • manager purchase tetap dibatasi category efektif
  • admin modul tetap dibatasi category efektif
  • hanya super admin (UID 1) yang dapat bypass penuh

Update Akses Ketat (2026-04-16)

Perubahan hardening yang diterapkan:

  • ditambahkan guard domain di purchase.order._search agar query selalu dibatasi ke company + category efektif user
  • ditambahkan purchase.order.check_access_rule agar akses lintas category menghasilkan pesan Access denied
  • bypass validasi yang sebelumnya berbasis base.group_system diubah menjadi hanya SUPERUSER_ID (UID 1)

Implikasi:

  • menghapus filter list default tidak lagi membuka data lintas category
  • admin purchase harus tetap didaftarkan ke team/category yang sesuai

Langkah Deploy

  1. restart service Odoo
  2. upgrade modul grt_purchase_business_category
  3. uji user non-super-admin dengan menghapus filter list default dan pastikan data lintas category tetap tidak muncul
  4. uji buka record lintas category dan pastikan muncul penolakan akses